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



prepared-statement environment (1)

首先,在MySQLi连接所有环境之前,始终拥有此行:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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

请注意,您必须能够查看PHP错误 。 这确实是不同环境的问题:

  • 在实际站点上,您必须查看错误日志,因此必须进行设置

    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    
  • 在本地开发服务器上,可以在屏幕上显示错误:

    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

还有一些你不应该做的清单:

  • 使用错误抑制运算符( @
  • 使用die()echo或任何其他函数无条件地在屏幕上打印错误消息。 PHP可以很好地回应它,不需要任何帮助。
  • 手动测试查询结果(如if($result) )只是没有意义。 您的查询失败并且您已经获得了错误异常,或者它没有问题,并且没有任何可测试的内容。
  • 使用try..catch回显错误消息。 PHP可以做得更好,更好。

在我的本地/开发环境中,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执行查询,结果是正常的。





error-reporting