代码之家  ›  专栏  ›  技术社区  ›  spice

使用pdo获取assoc数组,而不使用prepared语句

  •  0
  • spice  · 技术社区  · 6 年前

    我正在使用内部开关来确定结果的排序顺序,并且刚刚发现您不能使用 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 回复  |  直到 6 年前
        1
  •  1
  •   Martin Zeitler    6 年前

    语句需要执行…

    $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);
    
        2
  •  0
  •   u_mulder    6 年前

    PDO::query manual 演示如何处理结果,由返回 query 方法:

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