下面的脚本通过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警告: mysqli::PHP():无法在第12行/var/www/html/delpar.php中获取mysqli,参见: PHP致命错误:在第17行/var/www/html/delpar.php中调用非对象上的成员函数bind_param(),引用:
发布于 2016-01-12 19:38:00
这里很少有导致prepare()/bind_param()/execute()失败的问题。在视觉上发现的第一件事是,对table.column语句的WHERE子句中包含的WHERE引用不正确。MySQL的标识符引用要求,如果引用,标识符的每个段都被包装在自己的背板上。
// Correct quoting
$sql = 'DELETE FROM `subusers` WHERE `subusers`.`uid`=?';
//-----------------------------------^^^^^^^^^^^^^^^^^在开发和测试代码时,它总是有助于启用PHP的 ini directive,这将在屏幕上打印错误和警告,而不是要求您挖掘错误日志(也推荐使用error_reporting = E_ALL)。但是在任何情况下,大多数默认设置都会将PHP错误记录到web服务器的错误日志中,例如/var/log/apache2/error.log或/var/log/httpd/error_log。
根据第一个错误消息:
PHP警告: mysqli::PHP():无法在第12行/var/www/html/delpar.php中获取mysqli
很明显,MySQLi连接对象在$conn中要么已经关闭,要么从一开始就没有正确连接。查看更早的代码,以验证$conn->close()尚未被调用。
https://stackoverflow.com/questions/34752062
复制相似问题