首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bind_param误差500

bind_param误差500
EN

Stack Overflow用户
提问于 2016-01-12 19:20:26
回答 1查看 2.1K关注 0票数 1

下面的脚本通过javascript POST调用

代码语言:javascript
复制
$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(),引用:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-12 19:38:00

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

代码语言:javascript
复制
// 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()尚未被调用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34752062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档