32

我有以下代码:

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

4

7 回答 7

44

PDO 错误代码00000意味着一切正常。您点击错误检查代码的原因$sql3是返回 0(没有影响任何行)并且 PHP 将其评估为 false。尝试显式检查return false;

if($sql3 === false)
于 2012-08-05T04:15:23.257 回答
7

如果 exec 不更新任何行,它将返回 0。这使得 if(!$sql3) 评估为 false,你应该这样做:

if($sql3 === false){

}
于 2012-08-05T04:16:43.847 回答
4

根据我的经验,格式错误的查询(语法错误)和失败的查询(例如没有插入任何内容的 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;
    }
于 2017-03-29T12:23:20.140 回答
3

ENUM('0', '1')我刚刚在我的 php 项目中遇到了类似的情况 - 当我尝试插入字段设置为 NULL 的行而在数据库中定义字段的列的类型和限制为NOT NULL时,发生了错误代码为 '00000' 的 PDO 异常. 在修改 PHP 脚本以放置 '0' 而不是 后NULL,错误消失了。


进一步的编码使情况更加清晰 - 我在一个 DB 事务中执行了多个 PDO 语句,但仅基于执行的第一个 PDO 语句检查错误(在异常处理块中),而真正的错误发生在第三个 PDO 语句中。

于 2014-09-22T08:13:49.450 回答
2

00000意味着,它工作正常。你应该把你的 if 改成这样:$sql3 === false

于 2013-04-03T22:31:14.347 回答
2

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]);
}
于 2017-05-12T17:03:18.617 回答
1

我有同样的问题。它也折磨了我很多,但最终想通了。

假设您的表中有7 列

您正在将数据插入其中的 4个。

如果对于剩余的3 列未设置默认值(例如NULL for alpha-numeric columns, CURRENT_TIMESTAMP for date-time related columns etc.),则会出现上述问题。

如果您将数据插入所有这 7 列至少在未设置默认值的那些列中,您将不会收到任何错误并且数据将被插入。

于 2016-09-04T20:11:50.023 回答