PDO進行sql語句預處理和操作結果集詳細介紹(二)
阿新 • • 發佈:2019-01-06
<span style="font-size:18px;">一:預處理語句及其繫結引數執行insert try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有兩種佔位符號 * * ? 引數 --- 索引陣列, 按索引順序使用 * 名字引數 ----關聯陣列, 按名稱使用,和順序無關 */ $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(?, ?, ?, ?)"); //所有SQL都可執行 //準備好了一條語句,併入到伺服器端,也已經編譯過來了,就差為它分配資料過來 // $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(:name,:price, :num, :desn)"); //繫結名字引數 順序可以不一致和名字對應即可 /* $stmt->bindParam(":name", $name); $stmt->bindParam(":num", $num); $stmt->bindParam(":desn", $desn); $stmt->bindParam(":price", $p); */ ////繫結 問好?引數---得按順序繫結 $stmt->bindParam(1, $name, PDO::PARAM_STR);//第3個引數是資料型別可不用寫,會自動找型別 $stmt->bindParam(3, $num, PDO::PARAM_INT); $stmt->bindParam(4, $desn, PDO::PARAM_STR); $stmt->bindParam(2, $p, PDO::PARAM_STR); $name="wwww1"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "執行成功"; echo "最後插入的ID:".$pdo->lastInsertId(); }else{ echo "執行失敗!"; } //多次插入------------想執行多次。。。N次,傳值即可 $name="wwww1"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "執行成功"; echo "最後插入的ID:".$pdo->lastInsertId(); }else{ echo "執行失敗!"; } 二:預處理語句UPDATE try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有兩種佔位符號 * * ? 引數 --- 索引陣列, 按索引順序使用 * 名字引數 ----關聯陣列, 按名稱使用,和順序無關 */ //準備好了一條語句,併入到伺服器端,也已經編譯過來了,就差為它分配資料過來 //$stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(?, ?, ?, ?)"); //所有SQL都可執行 //update和insert一樣 $stmt=$pdo->prepare("update shop set name=:name,num=:num,price=:price,desn=:desn where id=:id"); //所有SQL都可執行 //繫結名字引數 順序可以不一致和名字對應即可 $stmt->bindParam(":name", $name); $stmt->bindParam(":num", $num); $stmt->bindParam(":desn", $desn); $stmt->bindParam(":price", $p);//變數名字隨便寫 $stmt->bindParam(":id", $id); $name="nnn"; $num=101; $desn="hello1"; $p=34.51; $id=108; if($stmt->execute()){ echo "執行成功"; //echo "最後插入的ID:".$pdo->lastInsertId(); }else{ echo "執行失敗!"; } //接著傳值執行第二次-----N次,這就是PDO預處理,只會編譯一次SQL,其他想執行傳值就可以 $name="mmm"; $num=101; $desn="hello1"; $p=34.51; $id=109; if($stmt->execute()){ echo "執行成功"; }else{ echo "執行失敗!"; } 三:預處理插入多條 try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有兩種佔位符號 * * ? 引數 --- 索引陣列, 按索引順序使用 * 名子引數 ----關聯陣列, 按名稱使用,和順序無關 */ $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(?, ?, ?, ?)"); //所有SQL都可執行--syi=== //準備好了一條語句,併入到伺服器端,也已經編譯過來了,就差為它分配資料過來 // $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(:name,:price, :num, :desn)"); //繫結引數 /* $stmt->bindParam(":name", $name); $stmt->bindParam(":num", $num); $stmt->bindParam(":desn", $desn); $stmt->bindParam(":price", $p); */ //繫結引數 $stmt->bindParam(1, $name, PDO::PARAM_STR); $stmt->bindParam(3, $num, PDO::PARAM_INT); $stmt->bindParam(4, $desn, PDO::PARAM_STR); $stmt->bindParam(2, $p, PDO::PARAM_STR); $name="wwww1"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "執行成功"; echo "最後插入的ID:".$pdo->lastInsertId(); }else{ echo "執行失敗!"; } $name="ooo"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "執行成功"; echo "最後插入的ID:".$pdo->lastInsertId(); }else{ echo "執行失敗!"; } 四:不繫結引數,直接execute中帶值執行sql try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有兩種佔位符號 * * ? 引數 --- 索引陣列, 按索引順序使用 * 名子引數 ----關聯陣列, 按名稱使用,和順序無關 */ //準備好了一條語句,併入到伺服器端,也已經編譯過來了,就差為它分配資料過來 $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(:name,:price, :num, :desn)"); // $stmt->execute($_POST); //傳值是可以不按順序--這是名字引數 $stmt->execute(array(":price"=>99, ":name"=>"kkk1", ":num"=>"451", ":desn"=>"aaaaaa1")); $stmt->execute(array(":price"=>88, ":name"=>"kkk2", ":num"=>"452", ":desn"=>"aaaaaa2")); $stmt->execute(array(":price"=>77, ":name"=>"kkk3", ":num"=>"453", ":desn"=>"aaaaaa3")); 五:獲取結果集 try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } //獲取結果 fetch()取一條--返回的是關聯和索引陣列一起返回 //獲取結果 fetchAll(); 得到得是二維陣列 $stmt=$pdo->prepare("select id, name, price, num, desn from shops where id > :id order by id"); $stmt->execute(array(":id"=>100)); //如果預SQL沒有引數時,execute也不用帶引數 直接問執行就可以 $stmt->setFetchMode(PDO::FETCH_ASSOC);//設定所有的獲取模式,全部是關聯陣列,下面就不用改啦,也可以解除安裝fetch裡面(PDO::FETCH_ASSOC),不寫就是預設的型別關聯和索引都返回 /* while($row=$stmt->fetch()){//獲取所有查出來的值 迴圈 print_r($row); echo '<br>'; } */ /* $row=$stmt->fetch(PDO::FETCH_ASSOC);獲取關聯陣列 $row=$stmt->fetch(PDO::FETCH_NUM); 獲取索引陣列 $row=$stmt->fetch(PDO::FETCH_BOTH); 關聯和索引都返回--預設就是這個 print_r($row); */ $data=$stmt->fetchAll(PDO::FETCH_ASSOC); //同上,也可以直接$stmt->setFetchMode(PDO::FETCH_ASSOC);這麼設定 echo '<pre>'; print_r($data); echo '</pre>';</span>