【发布时间】:2014-02-05 16:02:49
【问题描述】:
我在做什么
我正在尝试使用以下方法获取 Image 对象数组:
(如果我运行原始 MySQL 查询,我会返回 3 个不同的行,所有的值都不同,product_id 除外。)
$query = 'SELECT * FROM `j_images` WHERE product_id = :product_id';
$stmt = $db_conn->prepare($query);
if($stmt)
{
$I = new \jenis\Product\Image();
$stmt->setFetchMode(PDO::FETCH_INTO, $I);
$result = $stmt->execute(array('product_id'=>$product_id));
if($result)
{
$images = $stmt->fetchAll();
var_dump($images);
}
}
我得到了什么
一个包含 3 个 jenis\Product\Image 对象的数组,但对象(包括引用)是相同的。
我的期望
一个包含 3 个 \jenis\Product\Image 对象的数组,每个对象都是唯一的。
这是因为它正在获取同一个对象(即$I)吗?如果是这样,有没有办法解决这个问题?
但是 PHP 文档中的 Example 4 会让我相信这是可能的。
如果我直接按照文档中的示例进行操作:
$images = $stmt->fetchAll(PDO::FETCH_CLASS, "\jenis\Product\Image");,我得到三个单独的对象,但所有属性都是NULL。
附加信息
这是我的 Image Class 的精简版:
namespace jenis\Product;
use jenis\DB as DB;
use \PDO as PDO;
class Image
{
public $id;
public $product_id;
public $url;
public static function getImagesByProduct($product_id)
{
… code outlined above …
}
}
上述代码作为静态方法执行(例如Image::getImagesByProduct($product_id);
【问题讨论】:
-
删除
fetchAll行,只删除var_dump($I); -
@Digital Chris - 返回一个 Image 对象,其属性对应于第一条记录。
-
如果您删除
setFetchMode(),您会得到正确的结果吗? -
@Digital Chris - 感谢您的帮助;是的,我得到了正确的结果,尽管它是
PDO::FETCH_BOTH类型的数组。如果我想不通,我可能会走这条路。 -
问题可能出在您的 Image 类上...在这里查看答案:stackoverflow.com/questions/5137051/pdo-php-fetch-class。 PDO 可能无法访问变量?