PDO语句返回false

Sve*_*ven 5 php mysql pdo

我正在运行2个查询,第一个查询正确并返回所需的值,但第二个返回false.

我已经设置$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);好了我应该得到一个异常而不是假,所以我猜这是我$stmt->execute();的罪魁祸首.

因为我已经设置了错误属性,所以这是唯一可以返回false的函数.我也曾尝试设置$stmt->closeCursor();,$stmt = null;以及unset($stmt);与无济于事.

这将执行两个查询(fetch_wallet()函数中的"darkrp"和"pointshop").

if($this->pdo) {
    foreach($this->methods as $method => $bool) {
        if($bool) { $array[$method] = $this->fetch_wallet($method); }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是fetch_wallet()功能:

public function fetch_wallet($type) {
    if($type == "darkrp") {
        $query = "SELECT `wallet` FROM `darkrp_player` WHERE uid=:uid LIMIT 1";
    }
    elseif ($type == "pointshop") {
        $query = "SELECT `points` FROM `pointshop_data` WHERE uniqueid=:uid LIMIT 1";
    }
    try {
        $stmt = $this->pdo->prepare($query);
        $stmt->execute(array(":uid" => $this->uniqueid));
        $result = $stmt->fetchColumn();
        return $result;
    }
    catch (PDOException $e) {
        return $e->getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行时,var_dump($stmt->errorInfo());我得到这个,这意味着两个查询运行正常,虽然最后一个返回false时应该返回440.没有异常被抛出.

array(3) {
  [0]=> string(5) "00000"
  [1]=> NULL
  [2]=> NULL
}
array(3) {
  [0]=> string(5) "00000"
  [1]=> NULL
  [2]=> NULL
}
Run Code Online (Sandbox Code Playgroud)

phpMyAdmin中的pointshop_data表的打印屏幕(我想要那里的440值):

截图

返回var_dump($this->uniqueid);值为3266928646

我调试了所有东西,我没有任何错误,只是一个错误.

PHP版本: 5.3.10

MySQL版本: 5.5.38

操作系统: Ubuntu 12.04 LTS

Mar*_*łek 5

我认为你的类中肯定会有一些其他错误导致这段代码不起作用.

我导入了表结构并创建了以下测试代码:

<?php

class A
{
    private $pdo;
    private $uniqueid;
    private $methods = ['darkrp' => true, 'pointshop' => true];

    public function __construct($pdo, $uniqueid)
    {
        $this->pdo = $pdo;
        $this->uniqueid = $uniqueid;

    }


    public function fetch_wallet($type)
    {
        if ($type == "darkrp") {
            $query = "SELECT `wallet` FROM `darkrp_player` WHERE uid=:uid LIMIT 1";
        } elseif ($type == "pointshop") {
            $query = "SELECT `points` FROM `pointshop_data` WHERE uniqueid=:uid LIMIT 1";
        }
        try {
            $stmt = $this->pdo->prepare($query);
            $stmt->execute(array(":uid" => $this->uniqueid));
            $result = $stmt->fetchColumn();
            return $result;
        } catch (PDOException $e) {
            return $e->getMessage();
        }
    }


    public function run()
    {


        if ($this->pdo) {
            foreach ($this->methods as $method => $bool) {
                if ($bool) {
                    $array[$method] = $this->fetch_wallet($method);
                    var_dump($array[$method]);
                }
            }
        }

    }


}


$pdo = new PDO('mysql:host=localhost;dbname=tests', 'root', '');

$a = new A($pdo, 3266928646);

$a->run();
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

string(4) "2075" string(3) "440" 
Run Code Online (Sandbox Code Playgroud)

所以它正在按预期工作.

请尝试此代码(这是整个文件 - 当然您需要更改您的数据库名称,用户和密码)并检查它是否会得到相同的结果.如果是,可能您的课程中还有其他错误.