我正在玩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