Prepared statements zijn mooie dingen, maar debuggen is niet zo fraai. Als je door je code stapt met xdebug kom je er al gauw achter dat je niet hele query terug kunt zien.
Je ziet alleen de query met placeholders.
De makkelijkste oplossing is je query-log aan te zetten in je database. Hiermee worden alle queries gelogd die de database uitvoert.
Continue readingIn the process of upgrading PHP5.3 code I had to change all deprecated mysql_* functions to their mysqli_* counterparts.
For a lot of functions the signature stayed the same.
But mysqli_query and mysqli_connect have differences. So you can’t just find and replace them.
Instead of doing this manually, I wanted to find and replace recursively while changing the order of the arguments.
In vim:
# change mysql_query(param1, param2) to:
# mysqli_query(param2, param1)
:%s/mysql_query(\(.\{-}\),\(.\{-}\))/mysqli_query(\2, \1)/g
Using sed:
# on linux
# mysql_query(param1, param2) to
# mysqli_query(param2, param1)
sed -i 's|mysql_query(\(.*\),\(.*\))|mysqli_query(\2, \1)|g' devices.php
# on mac (otherwise you get the 'invalid command mode' when
# you run the sed command)
# mysql_query(param1, param2) to:
# mysqli_query(param2, param1)
sed -i '' -e 's|mysql_query(\([^,]*\),\([^)]*\))|mysqli_query(\2, \1)|g' devices.php
Recursively changing all files:
# in all files under current directory:
# mysql_query(param1, param2) to:
# mysqli_query(param2, param1)
fgrep -rl mysql_query . | while read file; do
sed -i '' -e 's|mysql_query(\([^,]*\),\([^)]*\))|mysqli_query(\2, \1)|g' $file
done
Note that sed
cannot do non greedy matching.
That’s why we’re searching for anything but the separator until the separator like this:
# non greedy matching with sed
\([^,]*\),
It basically states: get everything except for the comma until you get a comma (which is the first one to appear).