我正在爲我的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,並且只是一個簡短的時間窗口。 –