我正在玩MySQLi,試圖弄清楚它是如何工作的。在我目前的項目中,我總是喜歡在編碼時回顯查詢字符串,只是爲了確保一切正確,並快速調試我的代碼。但是...我如何用MySQLi語句做好準備?如何回顯MySQLi準備好的語句?
例子:
$id = 1;
$baz = 'something';
if ($stmt = $mysqli->prepare("SELECT foo FROM bar WHERE id=? AND baz=?")) {
$stmt->bind_param('is',$id,$baz);
// how to preview this prepared query before acutally executing it?
// $stmt->execute();
}
我已經經歷這個列表(http://www.php.net/mysqli),但沒有任何運氣。
編輯
啊,如果你從內庫MySQLi是不可能的,也許我會的東西堅持這樣的:
function preparedQuery($sql,$params) {
for ($i=0; $i<count($params); $i++) {
$sql = preg_replace('/\?/',$params[$i],$sql,1);
}
return $sql;
}
$id = 1;
$baz = 'something';
$sql = "SELECT foo FROM bar WHERE id=? AND baz=?";
echo preparedQuery($sql,array($id,$baz));
// outputs: SELECT foo FROM bar WHERE id=1 AND baz=something
遠非完美很明顯,因爲它仍然是相當冗餘—這是我想要阻止的一個問題,它也不能讓我知道MySQLi對數據做了什麼。但我想這樣我可以很快看到所有的數據是否存在並在正確的位置,並且與將手動變量手動納入查詢—相比,它可以節省我的一些時間,這可能會帶來許多變量的痛苦。
哇,看起來不像有一種方法。悲傷......我希望我可以切換到mysqli,但我需要記錄所有爲歷史記錄運行的SQL語句。 – 2009-06-07 23:25:10
你或許可以讓你的MySQL服務器記錄下它所接受的所有查詢 – 2009-06-07 23:34:51
是的,這很有幫助,但我不想記錄SELECTS,它對調試沒有太大幫助,因爲每秒可能有很多查詢。 – 2009-06-07 23:43:00