【问题标题】:What is difference between PDO::FETCH_CLASS and PDO::FETCH_INTOPDO::FETCH_CLASS 和 PDO::FETCH_INTO 有什么区别
【发布时间】:2015-06-30 09:27:55
【问题描述】:

我找不到 PDO::FETCH_CLASS 和 PDO::FETCH_INTO 之间的任何区别。你能举个例子说明它们之间有什么区别吗?

【问题讨论】:

  • 你读过教程吗??
  • 是的。我有,但我想不通!

标签: php


【解决方案1】:

看到这个PHP PDO fetching into objects

下面的例子

<?php

$sql_server = "localhost";
$sql_db = "test";
$sql_user = "root";
$sql_pass = "";

$pdo = new PDO("mysql:host=$sql_server;dbname=$sql_db", $sql_user, $sql_pass);

$sql = 'SELECT firstName, lastName FROM users';

$stmtA = $pdo->query($sql);
$stmtA->setFetchMode(PDO::FETCH_CLASS, 'Person');

$objA = $stmtA->fetch();
var_dump($objA);

//first create the object we will fetch into
$objC = new Person;
$objC->firstName = "firstName";
$objC->lastName = "lastName";

$stmtC = $pdo->query($sql);
$stmtC->setFetchMode(PDO::FETCH_INTO, $objC);

$objC = $stmtC->fetch(); // here objC will be updated
var_dump($objC);


class Person{
    public $firstName;
    public $lastName;
}

【讨论】:

    【解决方案2】:

    PDO::FETCH_CLASS:返回指定类的实例,将每一行的列映射到类中的命名属性。

    <?php
    class fruit 
    {
        public $name;
        public $colour;
    }
    
    $sth = $dbh->prepare("SELECT name, colour FROM fruit");
    $sth->execute();
    
    $result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
    var_dump($result);
    ?>
    

    上面的例子会输出类似于:

    array(3) {
      [0]=>
      object(fruit)#1 (2) {
        ["name"]=>
        string(5) "apple"
        ["colour"]=>
        string(5) "green"
      }
      [1]=>
      object(fruit)#2 (2) {
        ["name"]=>
        string(4) "pear"
        ["colour"]=>
        string(6) "yellow"
      }
      [2]=>
      object(fruit)#3 (2) {
        ["name"]=>
        string(10) "watermelon"
        ["colour"]=>
        string(4) "pink"
      }
    } 
    

    PDO::FETCH_INTO:要将行提取到类的现有实例中,请使用 PDO::FETCH_INTO 并将对象作为第二个参数传递。

    必须将列名声明为公共成员,或者 脚本会死掉。

     <?php
    class Test
    {
        protected $cols;
    
        function __set($name, $value) {
            $this->cols[$name] = $value;
        }
    
        function __get($name) {
            return $this->cols[$name];
        }
    }
    
    $obj = new Test();
    $db = PDOTest::factory();
    $stmt = $db->prepare("select * from test");
    $stmt->setFetchMode(PDO::FETCH_INTO, $obj);
    $stmt->execute();
    
    foreach ($stmt as $a) {
        print_r($a);
    }
    
    print_r($obj); // contains the same values as the last iteration above
    ?>
    

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多