PHP Prepared Statement没有插入,没有错误显示



我试图通过PHP中的准备语句插入一些数据。我有以下代码,这是不为我插入。我还设置了以下代码

ini_set('display_errors', 1);
error_reporting(~0);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$sqlInsert = "INSERT INTO deck_cards (deckid, cardid, qty) VALUES (?,?,?)";
$stmtInsert = $conn->prepare($sqlInsert);

if ($stmtInsert)
{
$stmtInsert->bind_param("sss", $deckid, $cardid, $cardcount) or trigger_error($stmtInsert->error, E_USER_ERROR);
$stmtInsert->execute() or trigger_error($stmtInsert->error, E_USER_ERROR);
echo "Check if this ran";
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
$conn->close();
}
$stmtInsert->close();
}
catch (Exception $ex)
{
echo 'Exception occurred '.$ex->getTraceAsString();
}

当这个执行时,我确实看到了文本"但没有其他信息。数据没有插入数据库。此外,我回显SQL字符串和变量,并直接针对MySQL运行它,它插入OK。我不知道在我上面非常简单的代码中发生了什么。

此外,插入在我的应用程序的其他页面中正常发生,但由于某种原因,这个页面不工作。

我知道我的错误报告有点过分了,但是我把我能想到的所有东西都扔了,看看是否在某个地方有错误,但是这个对我来说是一个头疼的问题。感谢您的帮助!

如果你的查询看起来不工作,它可能是由以下原因引起的:

  • SQL根本没有运行,由于错误的程序逻辑。在尽可能多的地方添加临时调试输出(或使用编辑器中的分步调试功能),以遵循程序的逻辑,并确保代码实际上达到了必须执行查询的点。
  • 查询执行过程中出现错误。关于如何为mysqli或PDO配置正确的错误报告的详细解释,请查看这些答案。

因此你的代码应该是这样的(假设前三行应该被移动到一些引导文件中,你会在这里包含)

echo "Startn"; // debugging statement, remove after resolving the issue
$sqlInsert = "INSERT INTO deck_cards (deckid, cardid, qty) VALUES (?,?,?)";
$stmtInsert = $conn->prepare($sqlInsert);
$stmtInsert->bind_param("sss", $deckid, $cardid, $cardcount);
echo "INSERT donen"; // debugging statement, remove after resolving the issue

如果查询实际执行,并且没有错误,则意味着查询成功。如果您仍然无法观察到期望的结果:

  • 对于不返回预期值的SELECT查询,它的输入数据肯定与数据库中的数据不匹配。这里有一些关于如何调试它的建议
  • 如果是INSERT(或其他数据修改查询),则有可能在错误的数据库中查看结果。将insert_id/affected_rows的结果和/或mysqli_info()的结果打印出来,即可得到证明。您还可以选择插入的数据并将其打印出来,就在INSERT的下面。然后仔细检查您正在使用的程序的数据库凭据以查看结果。
  • 在代码的某个地方有一个打开的事务或自动提交设置为0,但没有显式提交。检查你的代码,要么删除begin或添加commit

最新更新