<?php /** * php data object * * 預先處理(推薦使用) * * PDOStatement * 可以準備一個預先處理語句,也可以處理結果集 * 預留位置有兩種: * ?參數索引數組,按索引順序使用 * 名字參數關聯陣列,按名次使用,與順序無關 * *///一:連結$dsn = "mysql:host=localhost;dbname=hibernate";$username = "root";$passwd = "root";$options = array(PDO::ATTR_AUTOCOMMIT=>1);try {$pdo = new PDO($dsn, $username, $passwd, $options);}catch (PDOException $e){echo "資料庫連接失敗".$e->getMessage();exit;}//二:預先處理//準備語句//$sql = "select * from users where id = ?";$sql = "select * from users where id = :id";$stmt = $pdo->prepare($sql);//所有sql都可以執行//綁定//$stmt->bindParam(1, $id);$stmt->bindParam(":id", $id);$id = 2;if ($stmt->execute()) {echo "執行成功"."<br>";echo "最後影響的插入id".$pdo->lastInsertId()."<br>";}//直接在執行的時候插入語句(可用於傳值接收)$sql = "select * from users where id = :id";$stmt = $pdo->prepare($sql);//所有sql都可以執行$stmt->execute(array(":id"=>2));//直接在執行的時候插入語句(可用於傳值接收)$sql = "select * from users where id = ?";$stmt = $pdo->prepare($sql);//所有sql都可以執行$stmt->execute(array(12));//擷取結果集$sql = "select * from users where id < ?";$stmt = $pdo->prepare($sql);//所有sql都可以執行$stmt->execute(array(12));//設定模式的話,就是索引擷取都按照這個模式了$stmt->setFetchMode(PDO::FETCH_NUM);/** * 方式一:單行擷取 *///索引數組返回//$row = $stmt->fetch(PDO::FETCH_NUM);//關聯陣列返回//$row = $stmt->fetch(PDO::FETCH_ASSOC);//都返回返回//$row = $stmt->fetch(PDO::FETCH_BOTH);//然後再進行擷取//$row = $stmt->fetch();//print_r($row);/** * 方式二:全部擷取 */$data = $stmt->fetchAll();/** * 方式三:繫結資料行 * 下載執行方法之前 * 執行 時候後,迴圈輸出時,進行賦值 */$sql = "select * from users where id < :id";$stmt = $pdo->prepare($sql);//所有sql都可以執行$stmt->bindColumn("id", $id,PDO::PARAM_INT);$stmt->bindColumn("name", $name,PDO::PARAM_STR);$stmt->bindColumn("price", $price);$stmt->execute(array(":id"=>5));//輸出資料行名for ($i = 0; $i < $stmt->columnCount(); $i++) {$field = $stmt->getColumnMeta($i);echo $field["name"]."---";}echo "<br>";//輸出所有查詢資料while ($stmt->fetch()){echo "$id--$name--$price<br>";}echo "總行數:".$stmt->rowCount()."<br>";echo "總列數:".$stmt->columnCount()."<br>";?>