首页 > 解决方案 > 使用 PDO 获取 ASSOC 数组而不使用准备好的语句

问题描述

我正在使用内部开关来确定结果的排序顺序,并且刚刚发现您不能使用PDO这种方式绑定某些参数(例如选择表或指定排序顺序)。

所以我现在尝试返回我的结果而不使用->query这样的绑定(暂时忽略排序部分):

$results = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);

但是当我print_r($results)刚刚得到 PDO 对象语句时:

PDOStatement Object
(
    [queryString] => SELECT * from tracks WHERE online = 1
)

我在这里做错了什么?

这是我的 PDO 连接:

protected static function getDB()
    {

        static $db = null;

        if ($db === null) {
            $dbhost = getenv('DB_HOST');
            $dbuser = getenv('DB_USER');
            $dbpass = getenv('DB_PASS');
            $dbname = getenv('DB_NAME');

            try {
                $db = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8mb4",
                               $dbuser, $dbpass);

                $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
                $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            } catch (PDOException $e) {
                echo $e->getMessage();
            }
        }

        return $db;
    }

标签: phppdoassociative-array

解决方案


该语句需要执行...

$stmt = $db->query("SELECT * from tracks WHERE online = 1");
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

将它作为第二个参数传递也应该起作用:

$stmt = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);
$data = $stmt->fetchAll();

或单线:

$data = $db->query("SELECT * from tracks WHERE online = 1")->fetchAll(PDO::FETCH_ASSOC);

还有:

$stmt->setFetchMode(PDO::FETCH_ASSOC);

推荐阅读