我只是使用 PDO 将客户插入到我的表中,但由于我自己或其他研究无法解释的原因,它变得过于复杂。 它给出了错误代码:00000(这显然意味着成功)但实际上没有数据插入数据库并且只有在查询失败时才应该输出错误,但错误是..成功?
$insertUser = $database->prepare("INSERT INTO customer (Surname, Forename, AddressRow1, AddressRow2, AddressRow3, AddressRow4, PostCode, Telephone, mobileNumber, Email, assignedGarage)
VALUES (:surname, :forename, :addressrow1, :addressrow2, :addressrow3, :addressrow4, :postcode, :telephone, :mobilenumber, :email, :assignedgarage)");
$insertUser->bindParam(':surname', $_POST['surname']);
$insertUser->bindParam(':forename', $_POST['forename']);
$insertUser->bindParam(':addressrow1', $_POST['addressrow1']);
$insertUser->bindParam(':addressrow2', $_POST['addressrow2']);
$insertUser->bindParam(':addressrow3', $_POST['addressrow3']);
$insertUser->bindParam(':addressrow4', $_POST['addressrow4']);
$insertUser->bindParam(':postcode', $_POST['postcode']);
$insertUser->bindParam(':telephone', $_POST['telephone']);
$insertUser->bindParam(':mobilenumber', $_POST['mobilenumber']);
$insertUser->bindParam(':email', $_POST['email']);
$insertUser->bindParam(':assignedgarage', $_SESSION['garageId']);
if(!$insertUser->execute()) {
$err[] = $database->errorCode();
}
elseif ($insertUser->rowCount() == 1) {
$id = $database->lastInsertId();
echo "<script type=\"text/javascript\">
<!--
window.location = \"updateUser.php?id=$id\"
//-->
</script>";
}
if(count($err)) {
echo "<p style=\"color:red;\">The following errors were detected:</p><br/>";
foreach ($err as $key => $error) {
echo "<p style=\"color:red;\">$error</p><br/>";
}
}
我一开始并没有定义我想插入的所有列,但那没有用,所以我预定义了它们。
我的 table 处于早期的基本阶段。我有理由为手机/电话号码选择 varchars。
最佳答案
总结一下,你有这个:
$insertUser = $database->prepare(...);
if(!$insertUser->execute()) {
$err[] = $database->errorCode();
^^^^^^^^^
}
所以你调用PDO::errorCode()而不是 PDOStatement::errorCode() .正如手册所述:
PDO::errorCode() only retrieves error codes for operations performed directly on the database handle. If you create a PDOStatement object through PDO::prepare() or PDO::query() and invoke an error on the statement handle, PDO::errorCode() will not reflect that error. You must call PDOStatement::errorCode() to return the error code for an operation performed on a particular statement handle.
根据您的需要和当前代码,您可能还对 PDOStatement::errorInfo() 感兴趣, 它以友好的格式提供错误详细信息。当然,您也可以指示 PDO 抛出异常并摆脱手动错误检查。
关于php - PDO 报告执行失败但错误代码表明并非如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942564/