【问题标题】:PHP: Fatal error: Uncaught PDOException: SQLSTATE[HY000]PHP:致命错误:未捕获的 PDOException:SQLSTATE [HY000]
【发布时间】:2021-12-13 13:08:44
【问题描述】:

我有一个名为 player 的类,它创建、删除和控制播放器实体是否存在。在另一个文件中,我与PDO 建立了数据库连接,最后,在第三个文件中,我调用了播放器类。以下是所有代码:

文件:player.php

<?php
    class player
    {
        private $pdo;
        private $network_id;
        public $color;

        public function __construct($pdo, $network_id, $color)
        {
            $this->pdo = $pdo;
            $this->network_id = $network_id;
            $this->color = $color;
        }

        public function create_player()
        {
            if(!$this->exists_player())
            {
                $sql = 'INSERT INTO players SET network_id = :network_id';
                $query = $this->pdo->prepare($sql);
                $query->execute(array(':network_id' => $this->network_id));
            }
            else
            {
                echo 'error';
            }
        }

        public function delete_player()
        {
            if($this->exists_player())
            {
                $sql = 'DELETE FROM players WHERE network_id = :network_id';
                $query = $this->pdo->prepare($sql);
                $query->execute(array(':network_id' => $this->network_id));
            }
            else
            {
                return -1;
            }
        }

        private function exists_player()
        {
            $sql = 'SELECT COUNT(*) FROM players WHERE network_id = '.$this->network_id;
            $result = $this->pdo->exec($sql);

            if($result > 0) return true;
            else return false;
        }
    }
?>

文件:test.php

<?php
   include './Php/db_connection.php';
   include './Php/player.php';

    $player = new player($pdo, 1112, 'red');

    $player->create_player();
?>

文件:db_connection.php

 $pdo = new PDO('mysql:host=localhost; dbname=myDbName', 'dbUtent', 'myPassword');
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    

问题是当我调用 test.php 时,我得到了这个错误:

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. in F:\Software\Coding_Development_Software\Server\wamp\www\myProject\Ajax\Cube\Php\player.php on line 21

所有代码都是一个例子。

有什么想法吗?

【问题讨论】:

    标签: php sql


    【解决方案1】:

    这里的问题是,您需要获取直到它尝试获取行失败。事实上,你自己的异常正在告诉你解决方案:

    Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. in F:\Software\Coding_Development_Software\Server\wamp\www\myProject\Ajax\Cube\Php\player.php on line 21

    【讨论】:

    • exists_player 中,您应该使用-&gt;query 而不是-&gt;exec 来获得SELECT 的结果,然后您将拥有一个PDOStatement,您可以在上面进行Fetch这里描述。如果这返回一个包含值的数组,那么您可以检查 COUNT 值(或者只是 SELECT * 并计算结果数组)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2019-12-17
    • 2018-11-18
    • 2023-01-19
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多