【发布时间】:2015-06-30 09:27:55
【问题描述】:
我找不到 PDO::FETCH_CLASS 和 PDO::FETCH_INTO 之间的任何区别。你能举个例子说明它们之间有什么区别吗?
【问题讨论】:
-
你读过教程吗??
-
是的。我有,但我想不通!
标签: php
我找不到 PDO::FETCH_CLASS 和 PDO::FETCH_INTO 之间的任何区别。你能举个例子说明它们之间有什么区别吗?
【问题讨论】:
标签: php
看到这个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;
}
【讨论】:
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
?>
【讨论】: