Php 为什么“$this->\u query->execute()”的计算结果总是为false?
在db.php文件中,我有以下代码:Php 为什么“$this->\u query->execute()”的计算结果总是为false?,php,mysql,object,pdo,Php,Mysql,Object,Pdo,在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){
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->\u query->execute始终为false,这意味着$\u error始终被设置为true。我不能让它工作,即使它似乎没有任何问题
脚本进入我通过回显测试的prepare,这意味着它准备成功。它还进入foreach循环,因此必须对值进行绑定。但它似乎无法执行。为什么?
编辑:
我使用DB::getInstance->querySELECT email FROM user_credentials,其中user_id=?,array1调用查询,这就是getInstance的外观:
public static function getInstance(){
if(!isset(self::$_instance)){
self::$_instance = new DB();
}
return self::$_instance;
}
尝试此操作以了解查询返回的特定错误。我只修改了else块
这样做你的功能
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;
}
或者,如果您更喜欢方法链接,那么
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 );
您的代码的其余部分是无用的、不灵活的、容易出错的,有时甚至是完全错误的。我认为您与数据库的连接不正确。查看连接功能是否正常工作。如果您是从在线教程中尝试此操作,则类似于下面的代码:
$this->_pdo = new PDO('mysql:host=' . Config::get
('mysql/host') . ';dbname=' . Config::get('mysql/db'),
Config::get('mysql/username'), Config::get('mysql/password'));
您的$sql语句是什么样子的?它是否期望在执行中不提供参数?我正在使用DB::getInstance->querySELECT email FROM user_credentials,其中user_id=?,array1;我正在编辑我的帖子,以展示getInstance的外观。对于问号,您不需要绑定参数,但无论如何,您都应该在执行调用中提供参数。谢谢!但是当“$params”没有元素时,代码会发生什么变化?另外,你为什么建议使用“$stmt”而不是“$this->\u query”?我不知道是谁否决了你,但这个答案很有帮助。我刚刚开始学习PDO,这段代码来自一个教程,所以您可以一步一步地看到数据发生了什么。@markovchain试试看。不过没什么特别的-查询像往常一样执行。@markovchain$method=PDO::FETCH_OBJ是函数的默认值