我正在为我的PHP/MySQLi应用程序构建一个日志记录类。我明显可以记录原始准备语句(带有问号),但是没有手动解析它,是否有无法看到在MySQL中执行的实际原始查询?如何查看来自MySQLi预准备语句的呈现(原始)查询?
谢谢!
我正在为我的PHP/MySQLi应用程序构建一个日志记录类。我明显可以记录原始准备语句(带有问号),但是没有手动解析它,是否有无法看到在MySQL中执行的实际原始查询?如何查看来自MySQLi预准备语句的呈现(原始)查询?
谢谢!
打开MySQL中的查询日志并监视mysql查询日志文件。
在你的mysqld
部分的my.cnf或my.ini文件中添加指令:
log = /path/to/my/log/file
有很多种方法,看“原始”的查询,端口扫描使用tcpdump的,MySQL的代理,或看“中mysqladmin -Ppasswd‘PROCESSLIST’”虽然时间很短,你可以这样做:
Start:
echo "set global general_log_file=mysqllogfile;set global general_log=1;" | mysql -u root -ppasswd
From now on all queries will appear in /var/lib/mysql/mysqllogfile
Stop:
echo "set global general_log=0;" | mysql -u root -ppasswd
不要忘记完成后禁用!
您可以登录查询表mysql.general_log:
echo "set global log_output=TABLE;" | mysql -u root -ppasswd
# restart logging
echo "set global general_log=0;" | mysql -u root -ppasswd
echo "set global general_log=1;" | mysql -u root -ppasswd
注意查看general_log表还使他们更新!
我其实是在寻找一种方式来做到这一点在PHP。这对MySQLi可能吗?谢谢! – Harry
您可以使用php-mysqli发出这些命令并从表mysql.general_log中检索记录的查询,但是为什么?如果你编写并准备好查询,那么原始的sql是可预测的。你总是可以用你自己的类或sprintf用%d和'%s'用mysqli_real_escape_string()为所有参数准备查询,以便准备好'raw'sql然后记录它们,但据我所知,唯一的看法mysql服务器使用php-mysqli预处理语句看到的是查询general_log,并且只是一个简短的时间窗口。 –