PHP PDO。查询正确时错误号'00000'

时间:2012-08-05 04:14:13

标签: php database error-handling pdo

我有以下代码:

$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:脚本每次都正确执行。

7 个答案:

答案 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列 至少,而这些列中未设置默认值,则不会收到任何错误,数据将被插入。