PDO错误 - PDOException',消息'SQLSTATE [HY000]:常规错误'[重复]

时间:2022-10-14 13:49:18

This question already has an answer here:

这个问题在这里已有答案:

I am getting this error:

我收到此错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error' in ...

..whenever I execute this code with PDO:

..每当我用PDO执行此代码时:

 //Select data from the topic.
            $s = $dbh->prepare("SELECT * FROM forum_topics WHERE forum_id=:forum_cat_id AND topic_id=:topicid");
            $s->bindParam(':forum_cat_id', $forum_cat_id);
            $s->bindParam(':topicid', $topicid);
            $s->execute();
            $f= $s->fetch();

            $s = $dbh->prepare("UPDATE forum_cats SET forum_last_postid=:last_post_id, forum_last_posttime=:time, forum_last_userid=:userid, forum_last_username=:username, forum_posts=forum_posts+1 WHERE forum_id=:forum_cat_id");
            $s->bindParam(':last_post_id', $last_post_id);
            $s->bindParam(':time', $time);
            $s->bindParam(':userid', $userid);
            $s->bindParam(':username', $userdata['username']);
            $s->bindParam(':forum_cat_id', $forum_cat_id);
            try {
                $s->execute();
            }
            catch(PDOException $e) {
                die($e->getMessage());
            }

            if(count($s->fetchAll()) == 0)
                return 3;

I have no idea why this is happening. I've checked the query, and I simply cant find any errors..

我不知道为什么会这样。我检查了查询,我根本找不到任何错误..

2 个解决方案

#1


24  

This is what happens:

这是发生的事情:

  • You are trying to fetch an UPDATE query. You can't do that because UPDATE queries does not return values. If you wish to know how many rows were affected by the query, use the rowCount() function instead. Notice that not all DB Drivers provide the affected rows.

    您正在尝试获取UPDATE查询。您不能这样做,因为UPDATE查询不返回值。如果您想知道查询影响了多少行,请改用rowCount()函数。请注意,并非所有DB驱动程序都提供受影响的行。

  • You are using undeclared variables (at least in the code you posted here). This isn't the reason for this particular error, but could generate others.

    您正在使用未声明的变量(至少在您在此处发布的代码中)。这不是导致此特定错误的原因,但可能会产生其他错误。

  • You're not using the data you have selected from the database

    您没有使用从数据库中选择的数据

    Also, it is recommended to make all PDO operations within the try block, otherwise you may get unhandled exceptions.

    此外,建议在try块中进行所有PDO操作,否则可能会出现未处理的异常。

#2


10  

For others who came here trying to decipher this esoteric error message as I did, let me add that:

对于那些来到这里试图破译这个深奥的错误信息的人,让我补充说:

Trying to run fetches on pdo statements like:

尝试在pdo语句上运行提取,例如:

$statement->fetchAll();

or

要么

$statement->fetchAll(PDO::FETCH_ASSOC);

...after an INSERT or UPDATE** statement can cause this error (since there is no data to fetch).

...在INSERT或UPDATE **语句之后可能导致此错误(因为没有要获取的数据)。

**The UPDATE ... RETURNING ... statement is an exception to this.

** UPDATE ... RETURNING ...语句是一个例外。

#1


24  

This is what happens:

这是发生的事情:

  • You are trying to fetch an UPDATE query. You can't do that because UPDATE queries does not return values. If you wish to know how many rows were affected by the query, use the rowCount() function instead. Notice that not all DB Drivers provide the affected rows.

    您正在尝试获取UPDATE查询。您不能这样做,因为UPDATE查询不返回值。如果您想知道查询影响了多少行,请改用rowCount()函数。请注意,并非所有DB驱动程序都提供受影响的行。

  • You are using undeclared variables (at least in the code you posted here). This isn't the reason for this particular error, but could generate others.

    您正在使用未声明的变量(至少在您在此处发布的代码中)。这不是导致此特定错误的原因,但可能会产生其他错误。

  • You're not using the data you have selected from the database

    您没有使用从数据库中选择的数据

    Also, it is recommended to make all PDO operations within the try block, otherwise you may get unhandled exceptions.

    此外,建议在try块中进行所有PDO操作,否则可能会出现未处理的异常。

#2


10  

For others who came here trying to decipher this esoteric error message as I did, let me add that:

对于那些来到这里试图破译这个深奥的错误信息的人,让我补充说:

Trying to run fetches on pdo statements like:

尝试在pdo语句上运行提取,例如:

$statement->fetchAll();

or

要么

$statement->fetchAll(PDO::FETCH_ASSOC);

...after an INSERT or UPDATE** statement can cause this error (since there is no data to fetch).

...在INSERT或UPDATE **语句之后可能导致此错误(因为没有要获取的数据)。

**The UPDATE ... RETURNING ... statement is an exception to this.

** UPDATE ... RETURNING ...语句是一个例外。