繁体   English   中英

需要帮助以查找错误SQLSTATE [HY000]:常规错误

[英]Need help to find error SQLSTATE[HY000]: General error

我正在向数据库中插入一行。 它工作正常,但是当我启用PDO错误消息时,它给了我这个错误。 我想确切知道为什么会出现此错误,以便在开发过程中保持启用错误消息的功能。 这是我的代码:

启用我放入数据库类的错误

$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

我班上的数据库连接

try {
    $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db'), config::get('mysql/username'), config::get('mysql/password'));
    $this->_prefix = '';
} catch (PDOException $e) {
    die($e->getMessage());
}

这是我调用查询的方法

public function query($sql, $params = array()) {
    $this->_error = false;
    if($this->_query = $this->_pdo->prepare($sql)) {
        $x=1;
        if(count($params)){
            foreach($params as $param){
                $this->_query->bindValue($x, $param);
                $x++;
            }
        }

        if($this->_query->execute()){
            $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
            $this->_count = $this->_query->rowCount();
        } else {
            $this->_error= true;
        }

    }

    return $this;
} 

这是我的数据库类中的插入函数

  public function insert($table, $fields = array()){
    $keys = array_keys($fields);
    $values = '';
    $x = 1;

    foreach ($fields as $field) {
        $values .= "?";
        if ($x < count($fields)) {
            $values .= ', ';
        }
        $x++;
    }
    $sql = "INSERT INTO {$table} (`" . implode('`,`', $keys) . "`) VALUES ({$values})";

    if (!$this->query($sql, $fields)->error()) {
        return true;
    }

    return false;
}

这是我的游览类中的函数,该函数通过调用insert函数将所有数据保存到DB。

public function create($fields= array()){
    if(!$this->_db->insert("tours", $fields)){
        throw new Exception('There was a problem creating Tours.' .print_r($this->_db->error()));
    }
} 

保持启用ATTR_ERRMODE的原因是因为它可以帮助我在开发过程中进行调试,并且仍有许多页面需要开发。 我已经访问过许多类似的问题,但它们与错误有关。 我通常不会收到任何错误,只有在启用此错误消息传递系统后才能得到,该错误消息系统会告诉我所有详细信息。

这不同于其他问题,因为它没有给我错误,但它成功插入行,但是当我启用错误模式时,它给了我错误。 另一个我正在使用动态参数,因此无法添加冒号:来纠正它。 与查询数据库的功能相同。

我对Aynber表示歉意,因为他是对的,我无法理解答案,因此必须从函数中删除fetchAll。 因此,我现在创建了两个函数,一个用于插入/更新,另一个用于查询。 答案在那里,但我看到了其他答案。

我刚刚从查询功能中删除了以下行

$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);

现在,我的课程很好,因为它正在执行正确的错误处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM