Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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 为什么“$this->\u query->execute()”的计算结果总是为false?_Php_Mysql_Object_Pdo - Fatal编程技术网

Php 为什么“$this->\u query->execute()”的计算结果总是为false?

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){

在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->\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是函数的默认值