catch在mysqli INSERT失败时不报错。

Catch does not report an error when mysqli INSERT fails.

我确定这是一个基本错误,但几个小时后我仍然感到困惑。我浏览了大约一打 "catch not working" 并且 none 似乎很有用。

我继承了这段代码。所有变量都有值(尽管有些是空字符串)。不仅仅是这里的基本问题,我担心我的 catch 没有捕获错误(以前该语句试图将一个值存储在一个不存在的列中,甚至没有抛出异常)。

我把这个放在最上面。 (我最初尝试将这两个语句放在一起,但出现了问题——不记得是什么了。)

$mysqli = new mysqli("localhost", "", "", ""); // private stuff taken out
mysqli_report(MYSQLI_REPORT_STRICT);
mysqli_report(MYSQLI_REPORT_ERROR);

这是基本代码

$packageResult = $mysqli->query("INSERT INTO package (user_id,
package_name, weight, tracking_number, size_width, size_depth, size_height,
source, carrier, instructions, sent,ot48code) VALUES ({$_SESSION['id']},
'{$_POST['packageName']}', '{$_POST['weight']}', 
'{$_POST['tracking_number']}', '{$_POST['width']}', '{$_POST['depth']}', 
'{$_POST['height']}', '{$_POST['source']}', '{$_POST['carrier']}', 
'{$_POST['instructions']}',  NOW()),$ot48code");

我调试了一下,虽然 $packageResult 返回 FALSE,但从未访问过 catch 代码。 (在 PhpStorm 中使用 Xdebug。)

 catch (Exception $e)
   {
  echo "<pre>";
  echo "<br>";
  echo "ses testing at 171";
  @var_dump($_SESSION);
  echo "<br>";
  ...
  echo $e->getMessage();

catch 这样合适吗?

(PS 我知道这一切都非常不安全,但这是针对 alpha 的,我是一个慢打字员和非常糟糕的程序员(没有记忆)。)

要捕获 ERRORS 以及您似乎需要的异常

mysqli_report(MYSQLI_REPORT_ALL);

那一行字救了我。

我认为:

mysqli_report(MYSQLI_REPORT_ERROR);

会做这份工作,但是...

如果您遇到同样的问题,希望这对您有所帮助。

非常感谢@pec。