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()
尚未被调用。
我通过 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()
尚未被调用。