bind_param 错误 500

bind_param Error 500

我通过 javascript POST

调用了以下脚本
$target = $_POST['id'];
$sid = $_POST['sid'];

$sql = 'DELETE FROM `subusers` WHERE `subusers.uid`=?';
$stmt = $conn->prepare($sql);
if($stmt === false) {
  trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->errno . ' ' . $conn->error, E_USER_ERROR);
}
echo $target;
$stmt->bind_param('i', $target);
$stmt->execute();

每当执行时,由于某种原因它会崩溃 POST http://xx.php 500 (Internal Server Error)。当 bind_param 被删除时,它工作正常。 PHP 还与调用它的脚本通信,我尝试将 $target 的值发送回脚本并提醒它,它显示了一个很好的值。我也尝试 $target=1 只是为了将其声明为整数,但它没有任何改变。查询中的整个混乱只是我试图修复它以防某处有关键字。

错误代码:

PHP Warning: mysqli::prepare(): Couldn't fetch mysqli in /var/www/html/delpar.php on line 12, referer:

PHP Fatal error: Call to a member function bind_param() on a non-object in /var/www/html/delpar.php on line 17, referer:

这里有几个问题导致您的 prepare()/bind_param()/execute() 失败。视觉上发现的第一件事是 DELETE 语句的 WHERE 子句中包含的 table.column 的引用不正确。 MySQL 的标识符引用要求如果被引用,则标识符的每一段都包含在它自己的一对反引号中。

// Correct quoting
$sql = 'DELETE FROM `subusers` WHERE `subusers`.`uid`=?';
//-----------------------------------^^^^^^^^^^^^^^^^^

总是在开发和测试代码时,它有助于启用 PHP 的 display_errors ini directive,它会在屏幕上打印错误和警告,而不是要求您深入研究错误日志(也推荐error_reporting = E_ALL)。但在任何情况下,大多数默认设置都会将 PHP 错误记录到 Web 服务器的错误日志中,例如 /var/log/apache2/error.log/var/log/httpd/error_log.

基于第一条错误信息:

PHP Warning: mysqli::prepare(): Couldn't fetch mysqli in /var/www/html/delpar.php on line 12

很明显,您在 $conn 中的 MySQLi 连接对象要么已关闭,要么从未正确连接过。查看较早的代码以验证 $conn->close() 尚未被调用。