这篇文章给大家分享的是有关获取PDO对象并设置属性的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
与任何其他数据库扩展一样,PDO可以直接从所选数据创建现有类的实例。但是,与其他扩展不同的是,PDO为强大而灵活的对象操作提供了许多特性。
要从查询结果创建单个对象,有两种方法。
<强> 1。使用熟悉的fetch()方法:强>
类用户{};=$美元支撑pdo→查询(& # 39;从用户选择名称限制1 & # 39;); 美元支撑→setFetchMode (PDO:: FETCH_CLASS, & # 39;用户# 39;); $ user=$支撑→fetch ();
<强> 2。专用的fetchObject()方法:强>
类用户{}; $ user=$ pdo→查询(& # 39;从用户限制1 & # 39;选择名字)→fetchObject(& # 39;用户# 39;);
虽然这两个代码段都将为你提供相同的用户类实例,
/*对象(用户)# 3 (1){ (“name")=比;字符串(4)“John" }*/
后一种方法看起来绝对更简洁。此外,如果使用了fetch()方法,但是没有使用这样的名称定义类,则将静默返回一个数组,而使用fetchObject()将抛出一个适当的错误。
当然,上面描述的两种方法都可以与一个熟悉的而语句一起使用,从数据库中获取结果行。
使用一个方便的<强> fetchAll() >强方法一次获取对象数组中所有返回的记录:
类用户{}; 用户=美元pdo→查询(& # 39;从用户选择名字# 39;)→fetchAll (pdo:: FETCH_CLASS, & # 39;用户# 39;);
将给你一个数组,由一个用户类的对象组成,返回数据填充属性:
/*数组(2){ [0]=比;对象(用户)# 3 (1){ (“name")=比;字符串(4)“John" } [1]=比;对象(用户)# 4 (1){ (“name")=比;字符串(4)“Mike" } }*/
<强>注意>强,你可以将此模式与<强> PDO:: FETCH_UNIQUE 强>和<强> PDO:: FETCH_GROUP >强组合使用,以获得由唯一字段索引的结果数组,或者分别使用非唯一字段对结果进行分组。
例如,下面的代码将返回一个数组,其中记录id将用作数组索引而不是连续数字。
类用户{};=$美元支撑pdo→查询(& # 39;选择id, id、名称、车从用户# 39;); $用户=鷉etchAll (PDO: FETCH_CLASS | PDO:: FETCH_UNIQUE, & # 39;用户# 39;);
无论选择哪种方法,查询返回的所有列都将按照以下规则分配给对应的类属性:
1。如果有一个类属性,它的名称与列名相同,则将为该属性分配列值
2。如果没有这样的属性,那么将调用一个魔术方法__set ()
3。如果没有为该类定义__set()方法,那么将创建一个公共属性并为其分配一个列值。
例如,这段代码
类用户 { 美元的公共名称; } $ user=$ pdo→查询(& # 39;SELECT *从用户限制1 & # 39;)→fetchObject(& # 39;用户# 39;);
将给你一个对象,所有属性自动分配,无论它们是否存在于类中:
/*对象(用户)# 3 (4){ (“id")=比;字符串(3)“104”; (“name")=比;字符串(4)“John" (“sex")=比;字符串(4)“male" (“car")=比;字符串(6)“Toyota" }*/
从这一点可以看的出,为了避免自动创建属性,你可以使用魔术方法__set()过滤掉属性。最简单的过滤技术就是一个空的__set()方法。使用它,只会设置现有的属性:
类用户 { 私人美元名称; 公共函数__set(名字,美元价值){} } $ user=$ pdo→查询(& # 39;SELECT *从用户限制1 & # 39;)→fetchObject(& # 39;用户# 39;);/* 数组(1){ [0]=比;对象(用户)# 3 (1){ 【“name":“User":私人]=比;字符串(4)“John" } }*/
如上PDO还可以为私有属性分配值。
当然,对于新创建的对象,我们可能需要提供构造函数参数。为此,<强> fetchObject() 强>和<强> fetchAll() >强方法都有一个专用的参数,你可以使用它以数组的形式传递构造函数参数。
假设我们有一个用户类,它有一个汽车属性,可以通过提供的变量在构造函数中设置:
类用户{ 公共函数__construct(汽车美元){ $ this→车=$车; } }
在获取记录时,我们应该添加一个带有构造函数参数的数组:
用户=美元pdo→查询(& # 39;从用户限制1 & # 39;选择名称) →fetchAll (PDO:: FETCH_CLASS, & # 39;用户# 39;,[& # 39;卡特彼勒# 39;]); $ user=$ pdo→查询(& # 39;从用户限制1 & # 39;选择名称) →fetchObject(& # 39;用户# 39;,[& # 39;卡特彼勒# 39;]);获取PDO对象并设置属性的方法