首页 文章

如何在不同环境中获取MySQLi错误信息

提问于
浏览
62

在我的本地/开发环境中,MySQLi查询执行正常 . 但是,当我在我的Web主机环境中上传它时,我收到此错误:

致命错误:在...中的非对象上调用成员函数bind_param()

这是代码:

global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param('i', $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);

为了检查我的查询,我尝试通过控制面板phpMyAdmin执行查询,结果是正常的 .

2 回答

  • 69

    首先,在MySQLi连接到 all 环境之前,始终有这一行:

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    

    之后,所有MySQL错误都将转移到PHP异常中 . 反过来,未捕获的异常会导致PHP致命错误 . 因此,如果出现MySQL错误,您将收到传统的PHP错误 . 这将立即让您意识到错误原因 . 堆栈跟踪将引导您到达发生错误的确切位置 .

    请注意,您必须能够看到 PHP errors in general . 这确实是不同环境的问题:

    • 在实际网站上,您必须查看错误日志,因此必须进行设置
    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    
    • 在本地开发服务器上,可以在屏幕上显示错误:
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

    还有一些你 should not 的清单:

    • 使用错误抑制运算符( @

    • 使用 die()echo 或任何其他功能无条件地在屏幕上打印错误消息 . PHP可以很好地回应它,不需要任何帮助 .

    • 手动测试查询结果(如 if($result) )是没有意义的 . 您的查询失败并且您已经获得了错误异常,或者它没有问题,并且没有任何可测试的内容 .

    • 使用try..catch回显错误消息 . PHP可以做得更好,更好 .

  • 0

    我不认为你创造了这个对象 .

    $ mysqli = new mysqli('localhost','my_user','my_password','world');

    但我真的建议你改用PDO .

相关问题