如何查看预准备语句的内容?
我正在努力学习在PHP中使用ready语句和mysqli,通常,如果我遇到查询问题,我只是将其回显到屏幕上,看看它作为第一步是什么样子。
我如何使用预准备语句执行此操作?
我希望在变量被替换后看到SQL语句。
我正在努力学习在PHP中使用ready语句和mysqli,通常,如果我遇到查询问题,我只是将其回显到屏幕上,看看它作为第一步是什么样子。
我如何使用预准备语句执行此操作?
我希望在变量被替换后看到SQL语句。
使用预准备语句:
在PHP端没有SQL查询的“构建”,因此,没有办法实际获取该查询。
这意味着,如果要查看 SQL 查询,则必须使用 SQL 查询,而不是预准备语句。
对于使用 mysql_stmt_prepare() 和 mysql_stmt_execute() C API 函数执行的预准备语句,服务器将“准备”和“执行”行写入常规查询日志,以便您可以知道何时准备和执行语句。
[...] 服务器将以下行写入常规查询日志:
准备 [1] SELECT ?
执行 [1] 选择 3
因此,出于调试目的,请激活常规日志并密切关注该文件。
编辑:哦,这个问题有一个[mysqli]标签...完全忽略了这一点。
如果语句根本没有执行,您是否(双/三次)检查在此过程中没有发生错误?
echo "<pre>Debug: start</pre>\n";
$mysqli = new mysqli('localhost', 'localonly', 'localonly', 'test');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$result = $mysqli->query('CREATE TEMPORARY TABLE foo (id int auto_increment, x int, primary key(id))');
if ( false=== $result) {
die('error : '. $mysqli->error);
}
$stmt = $mysqli->prepare('INSERT INTO foo (x) VALUES (?)');
if ( false===$stmt ) {
die ('prepare() failed: ' . $mysqli->error);
}
$result = $stmt->bind_param('i', $x);
if ( false===$result ) {
die('bind_param() failed');
}
$x = 1;
$result = $stmt->execute();
if ( false===$result ) {
die('execute() failed: '.$stmt->error);
}
echo "<pre>Debug: end</pre>\n";