我正在尝试将MySQLi查询错误转换为异常,但Couldn't-mysqli_sql_exception仅在连接DB失败时才会引发。
我使用了
原代码:
public function mysqlQuery($SQL) {
$this->Result = mysqli_query($this->DBlink, $SQL);
if($this->Result === false)
throw new MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink));
return $this->Result;
}
问:当查询失败时不抛出警告或异常,因此我必须检查mysqli_query()是否返回false,这是正常的吗?
我知道有点晚了,但为了后人。我发现MYSQLI_REPORT_STRICT是限制性的,某些异常不会引发,因此catch块无法处理这些异常。
mysqli_report(MYSQLI_REPORT_ALL); // Traps all mysqli error
try {
$mysqli = new mysqli('localhost','user,'pwd','db');
/* I don't need to explicitly throw an exception as this is being
done automatically */
} catch(Exception $e) {
echo $e->getMessage();
}
我必须检查mysqli_query()是否返回false?
没有。
您应该能够执行所需的操作,并指示mysqli驱动程序在SQL错误时抛出异常,但如果还没有启用
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)
public function mysqlQuery($SQL) {
try {
$this->Result = mysqli_query($this->DBlink, $SQL);
} catch (mysqli_sql_exception $e) {
throw new MySQLiQueryException($SQL, $e->getMessage(), $e->getCode());
}
return $this->Result;
}
(注意:在重新引发的异常中,我将
前段时间我设法解决了这件事。另一个答复指出,
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
是告诉mysqli抛出异常的正确方法。
只需确保不要将每个查询都包装在try-catch中。这是一个非常常见的错误观念,认为一旦开始使用异常,就应该开始向左和向右抛出尝试和捕获。恰恰相反,try-catch应该谨慎使用。而99%的错误不应该在适当的位置上处理,而是由一个站点范围内的错误处理程序来处理。您可以从我的关于PHP错误报告的文章中阅读更多关于这个主题的内容
问题内容: 我正在尝试将MySQLi查询错误转换为“异常”,但不能-仅在无法连接数据库时抛出mysqli_sql_exception。 我使用了程序化的MySQLi函数嵌入到自定义包装器类中。 以前的代码: 问题: 查询失败是否正常,没有警告,也没有引发异常,所以我必须检查mysqli_query()是否返回false? 问题答案: 不久前,我设法解决了这个问题。正如在其他答案中指出的那样, 是告
这是从下面提到的SQL查询创建的JPQl查询: “org.springframework.dao.invalidDataAccessResourceUsageException:无法提取ResultSet;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammarexception:无法提取ResultSet” 请问上述例外情况我能做些什么?
问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: 在MySQL中为数值选择TOP X(或底部)百分比 我将如何在MySQL中编写此查询? 该表中的条目数将不断变化,因此我需要按百分比而不是固定数进行选择。 问题答案: 这实际上是一个重复的问题,但是我现在有一个更好的单次快速回答:
问题内容: 在Java 7中是否可以将对象转换为Json? 例: 问题答案: 从理论上讲,您还可以遍历堆栈跟踪中的元素并生成如下内容: 您可以像这样遍历异常:
问题内容: 我想将以下SQL查询转换为Elasticsearch之一。谁能帮上忙 我尝试了以下方法: 但不确定我是否做对了,因为它无法验证结果。似乎要在聚合内添加查询。 问题答案: 假设您使用Elasticsearch 2.x,则有可能在Elasticsearch中 具有 -semantics。我不知道2.0之前的可能性。 您可以使用新的Pipeline Aggregation Bucket Se
问题内容: 这个问题已经在这里有了答案 : mysqli_fetch_assoc()期望参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误? (1个答案) mysqli还是死了,它一定要死吗? (4个答案) 5年前关闭。 我正在使用以下脚本来处理将信息添加到我的网站的表单。我遇到的问题是,当我提交表单时,什么也没有提交到数据库,并且没有错误。如何将错误报告添加到查询