【发布时间】:2010-11-01 01:40:36
【问题描述】:
我目前正在使用 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语句都记录下来作为一个历史记录。
-
你可以让你的 MySQL 服务器记录它收到的所有查询
-
是的,这很有帮助,但我不想记录 SELECTS,而且它对调试没有多大帮助,因为每秒可能有很多查询。