我在db.php文件中有以下代码:
public function query($sql, $params = array()){
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)){
$x = 1;
if(count($params)){
foreach($params AS $pa){
$this->_query->bindValue($x, $pa);
$x++;
}
}
#MASSIVE ERROR
#correctthis
if($this->_query->execute()){
echo 'success';
$this->_result = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_query = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
public function error(){
return $this->_error;
}
我的问题是$this->_query->execute()
总是为假,这意味着$ _error总是设置为true。我无法让它发挥作用,即使它似乎没有任何问题。
脚本进入准备(我通过echo测试),这意味着它已成功准备。它也会进入foreach循环,因此必须绑定值。但它似乎无法执行。为什么呢?
编辑:
我使用DB::getInstance()->query("SELECT email FROM user_credentials WHERE user_id = ?", array(1))
来调用查询,这就是getInstance的样子:
public static function getInstance(){
if(!isset(self::$_instance)){
self::$_instance = new DB();
}
return self::$_instance;
}
答案 0 :(得分:0)
我认为您与数据库没有正确连接。查看连接功能是否正常工作。如果你从在线教程中尝试这个,那就像下面的代码:
$this->_pdo = new PDO('mysql:host=' . Config::get
('mysql/host') . ';dbname=' . Config::get('mysql/db'),
Config::get('mysql/username'), Config::get('mysql/password'));
答案 1 :(得分:-1)
尝试此操作以了解查询返回的特定错误。我只修改了 else 块。
#MASSIVE ERROR
#correctthis
if($this->_query->execute()){
echo 'success';
$this->_result = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_query = $this->_query->rowCount();
} else {
$this->_error = true;
echo $this->_query->errorInfo()[2];
}
答案 2 :(得分:-1)
以这种方式使你的功能
public function queryAll($sql, $params = array(), $method = PDO::FETCH_OBJ)
{
$stmt = $this->_pdo->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll($method);
}
或者,如果您更喜欢方法链接,那么就这样
public function query($sql, $params = array())
{
$stmt = $this->_pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
然后在异常模式下设置PDO,并始终通知您发生的任何错误。为此,请在构造函数
中添加此代码$this->_pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
你的其余代码是无用的,不灵活的,容易出错的,有时甚至是明显的错误。