我有以下代码:
$sql3 = "update news set date='$time' where id='2'";
$sql3 = $connect->exec($sql3);
if(!$sql3)
{
print_r($connect->errorInfo());
$error = $connect->errorInfo();
die ("Error: (".$error[0].':'.$error[1].') '.$error[2]);
}
当我运行脚本时,有时会得到错误号'00000'。我的意思是介绍IF
。这一切都是随机的。输出(有时):
Array ( [0] => 00000 [1] => [2] => )
我该怎么做才能解决这个问题? PS:脚本每次都正确执行。
答案 0 :(得分:33)
PDO错误代码00000
表示一切正常。您遇到错误检查代码的原因是$sql3
返回0(没有行受影响),PHP将其评估为false。尝试明确检查return false;
if($sql3 === false)
答案 1 :(得分:7)
如果exec没有更新任何行,它将返回0.这使if(!$ sql3)评估为false,你应该这样做:
if($sql3 === false){
}
答案 2 :(得分:3)
根据我的经验,错误形成的查询(语法错误)和失败的查询(例如没有插入任何内容的INSERT)也可能错误地返回错误代码00000.您应该继续尝试对SQL运行完整查询控制台,看看它失败的原因。我真的不知道为什么没有返回正确的错误消息。这是我们使用的代码片段
$r = $pdo->prepare($sql);
if (!$r->execute($input_parameters)) { # query failed
if ($bLogFailures) {
error_log('query failed: ERROR['.$pdo->errorCode().':'.print_r($pdo->errorInfo(), true).'] QUERY['.$sql.']');
}
return false;
}
答案 3 :(得分:2)
00000
意味着,它运作正常。你应该改变你的if:$sql3 === false
。
答案 4 :(得分:1)
我刚刚在我的php项目中得到了类似的情况 - 当我尝试插入一个字段设置为NULL的行时发生了错误代码为'00000'的PDO异常,而定义数据库中字段的列的类型为{ {1}}和限制 NOT NULL 。
修改PHP脚本以放置'0'而不是ENUM('0', '1')
后,错误就会消失。
进一步的编码为这种情况带来了更多的亮点 - 我在一个数据库事务中执行了多个PDO语句,但是只根据第三个PDO语句中发生实际错误时执行的第一个PDO语句检查错误(在异常处理块中)
答案 5 :(得分:1)
PDO :: exec语句返回一个整数以指示受影响的行数。因此,在您的特定情况下,如SomeKittens所示,如果0行受到影响,则会触发您的错误代码。
但是,如果您担心您的查询是否有效,那么您可以更好地使用PDO :: query(就您的代码而言($ returnObj = $ connect-> query($ sql3)而不是PDO) :: EXEC键。
然后可以检查$ returnObj以查看SQL执行中是否存在错误,然后您可以对SQL查询进行故障排除,因为它会告诉您错误是什么以及错误位置。
这样做最好的选择是:
//set PDO to throw an error so you can wrap the query in a try / catch block.
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql3 = "update news set date='$time' where id='2'";
try {
$returnObj = $connect->query($sql3);
} catch (PDOException $e) {
print_r($returnOjb->errorInfo());
$error = $returnObj->errorInfo();
die ("Error: (".$error[0].':'.$error[1].') '.$error[2]);
}
答案 6 :(得分:0)
我遇到了同样的问题。它也折磨了我很多,但终于弄明白了。
假设您的表格中有 7列。
您将数据插入其中4个。
如果剩余 3列,则未设置默认值(例如NULL for alpha-numeric columns, CURRENT_TIMESTAMP for date-time related columns etc.
),则会出现上述问题。
如果您要将数据插入所有7列或 至少,而这些列中未设置默认值,则不会收到任何错误,数据将被插入。