Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义PDO类悄悄地失败_Php_Mysql_Pdo - Fatal编程技术网

Php 自定义PDO类悄悄地失败

Php 自定义PDO类悄悄地失败,php,mysql,pdo,Php,Mysql,Pdo,由于某些原因,此自定义PDO类无法写入数据库。它只是悄悄地失败了——没有抛出错误消息。一个非常类似的定制PDO类(ReadPDO)非常适合从数据库中读取数据。生成的SQL语句在通过PHPMyAdmin查询到DB时工作正常。我已经仔细检查了用户权限,一切都正常 我怀疑我误解了事情的运作方式。有什么想法吗 // Creates a write-only PDO, using config settings from inc_default.php class WritePDO extends PD

由于某些原因,此自定义PDO类无法写入数据库。它只是悄悄地失败了——没有抛出错误消息。一个非常类似的定制PDO类(ReadPDO)非常适合从数据库中读取数据。生成的SQL语句在通过PHPMyAdmin查询到DB时工作正常。我已经仔细检查了用户权限,一切都正常

我怀疑我误解了事情的运作方式。有什么想法吗

// Creates a write-only PDO, using config settings from inc_default.php 
class WritePDO extends PDO{

    public function __construct(){
        //Pull global DB settings
        global $db;
        global $write_host;
        global $write_username;
        global $write_password;

        try{
            parent::__construct("mysql:dbname={$db};host={$write_host}", $write_username, $write_password);
        } catch (PDOException $e){
            echo 'Connection failed: ' . $e->getMessage();
        }
    }
}

private function updatePlayer(){
    $conn = new WritePDO();
    $sql = "UPDATE {$this->hvz_db}
        SET 
        hvz_bitten      ='{$this->hvz_bitten}',
        hvz_died        ='{$this->hvz_died}',
        hvz_feedCode    ='{$this->hvz_feedCode}',
        hvz_status      ='{$this->hvz_status}',
        hvz_feeds       ='{$this->hvz_feeds}',
        hvz_lastFed     ='{$this->hvz_lastFed}',
        hvz_ozOpt       ='{$this->hvz_ozOpt}',
        hvz_parent      ='{$this->hvz_parent}'
        WHERE users_id  ={$this->id}";
    $query = $conn->exec($sql);
}
它吐出的SQL如下所示:

UPDATE hvz_2011_spring SET hvz_bitten ='', hvz_died ='', hvz_feedCode ='NOMNOM', hvz_status ='Human', hvz_feeds ='0', hvz_lastFed ='', hvz_ozOpt ='0', hvz_parent ='' WHERE users_id =1

您确定sql是正确的吗

exec没有发送任何错误消息

尝试执行var_转储($conn->errorInfo());在$conn->exec($sql)之后


/Emil

它的可能重复不是完全重复-尽管能够从PDO中挤出错误消息有助于解决此特定问题。它抛出的错误是:数组(3){[0]=>string(5)“42000”[1]=>int(1143)[2]=>string(102)“SELECT命令拒绝用户'refactor2'@'localhost'访问表'hvz_2011_spring'中的'users_id'列”}让我尝试一下……确实如此-显然它需要访问SELECT命令才能执行更新命令。谁知道呢?