需要帮助才能找到错误SQLSTATE [HY000]:常规错误

时间:2016-08-08 15:59:34

标签: php mysql pdo

我在数据库中插入一行。它工作正常,但是当我启用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;
} 

这是我的DB类中的插入函数

  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;
}

这是我的tour类中的函数,它通过调用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启用的原因是因为它帮助我在开发期间进行调试,而且我还有很多页面需要开发。我已经访问了许多类似的问题,但它们与错误有关。我通常不会收到任何错误,但只有当我启用了这个错误消息系统时才能告诉我所有细节。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

现在感谢我的课程很好,因为它正在进行适当的错误处理。