使用PDO获取ASSOC数组而不使用准备好的语句

时间:2018-12-17 07:05:22

标签: php pdo associative-array

我正在使用内部开关来确定结果的排序顺序,并且刚刚发现您不能使用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;
    }

2 个答案:

答案 0 :(得分:1)

该语句需要执行...

$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);

答案 1 :(得分:0)

PDO::query manual向您展示如何处理由query方法返回的结果:

$results = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);
foreach ($results as $row) {
    print $row;
}