<?php$dbConn = new PDO( ???"mysql:host=localhost;dbname=adtuu",‘root‘,‘root‘, ???array( ???????// 强制 PDO 获取的表字段字符的大小写转换,或原样使用列信息 ???????PDO::ATTR_CASE ?????????????=> PDO::CASE_LOWER, ???????// 执行出错时抛出异常 ???????PDO::ATTR_ERRMODE ??????????=> PDO::ERRMODE_EXCEPTION, ???????// ?将返回的空字符串转换为 SQL 的 NULL ???????PDO::ATTR_ORACLE_NULLS ?????=> PDO::NULL_NATURAL, ???????// 返回数据的时候不将数值转换为字符串 ???????PDO::ATTR_STRINGIFY_FETCHES => false, ???????// 设置为false禁止PDO模拟预处理语句,而使用真正的预处理语句,即有MySQL执行预处理语句 ???????PDO::ATTR_EMULATE_PREPARES ?=> false, ???));$sql = ‘SELECT adtuu_uuid, adtuu_name FROM blog_adtuu WHERE adtuu_uuid = ? AND adtuu_name = ?‘;$q = $dbConn->prepare($sql);$id = 1;$name = ‘adtuu‘;//$q->bindParam(1, $id);//$q->bindParam(2, $name);$i = 1;foreach (array(1, ‘adtuu‘) as &$bind) { ???$q->bindParam($i, $bind); ???$i++;}$result = $q->execute() ? $q->fetch(PDO::FETCH_ASSOC) : array();$q->closeCursor();var_dump($result);//假设数据库中存在有id为1,name为adtuu的数据//大家觉得上面的查询能够查出数据来吗???//答案当然是否定的,为什么呢?//原来是bindParam中第二个参数要是引用值才行//需要修改成下面的$i = 1;foreach (array(1, ‘adtuu‘) as &$bind) { ???$q->bindParam($i, $bind); ???$i++;}//注意&$bind//当然还有更简单的方法,就是抛开循环直接将参数传入execute中$result = $q->execute(array(1, "adtuu‘s")) ? $q->fetch(PDO::FETCH_ASSOC) : array();
php PDO遇到的坑
原文地址:http://www.cnblogs.com/adtuu/p/7471817.html