標籤:答案 param 存在 logs etc soc cas 返回 class
<?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, // 將返回的Null 字元串轉換為 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遇到的坑