-
try{ $dsn='mysql:host=localhost;dbname=imooc'; $username='root'; $passwd='root'; //關閉自動提交功能(PDO::beginTransaction()中有這個功能但不是所有類型的數據庫都支持,所有手動關閉是個好習慣) $options=array(PDO::ATTR_AUTOCOMMIT,0); $pdo=new PDO($dsn, $username, $passwd, $options); var_dump($pdo->inTransaction()); //判斷這條語句是否在一個事務代碼中,返回值為false $pdo->beginTransaction(); //開啟事務 var_dump($pdo->inTransaction()); //判斷這條語句是否在一個事務代碼中,返回值為true $res1=$pdo->exec('UPDATE userAccount SET money=money-2000 WHERE username="imooc"'); if($res1==0){ throw new PDOException('imooc 轉賬失敗'); //拋出異常給catch } $res2=$pdo->exec('UPDATE userAccount SET money=money+2000 WHERE username="king"'); if($res2==0){ throw new PDOException('king 接收失敗'); //拋出異常給catch } $pdo->commit(); //提交事務 且開啟自動提交 }catch(PDOException $e){ $pdo->rollBack(); //回滾事務 且開啟自動提交 echo $e->getMessage(); }查看全部
-
/* PDO::ERRMODE_SILENT:默認模式,靜默模式,完全不顯示, PDO::ERRMODE_WARNING:警告模式,拋出警告后,程序可繼續運行 PDO::ERRMODE_EXCEPTION:異常模式(UP推薦模式),錯誤信息顯示最完整,在拋出異常后程序停止運行 */ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql='SELECT * FROM noneTable'; $pdo->query($sql); echo $pdo->errorCode(); //顯示錯誤STATE碼 echo '<br/>'; print_r($pdo->errorInfo()); //顯示錯誤信息查看全部
-
當返回的PDOStatement對象中存儲了多個結果集,使用PDOStatement::fetchAll()方法每次只能取出一個結果集,此時需要使用PDOStatement ::nextRowset();移動結果集指針讓其指向下一個結果集,才能用PDOStatement::fetchAll()或者PDOStatement::fetch()方法取到下一個結果集記錄. $sql='call test1()'; //test1為SQL的PROCEDURE(存儲過程) $stmt=$pdo->query($sql); //PDOStatement對象中存儲了多個結果集 $rowset=$stmt->fetchAll(PDO::FETCH_ASSOC); //只能取出一個結果集 print_r($rowset); echo '<hr color="red"/>'; $stmt->nextRowset(); //移動結果集指針 $rowset=$stmt->fetchAll(PDO::FETCH_ASSOC); print_r($rowset);查看全部
-
PDOStatement::debugDumpParams()打印一條 SQL 預處理命令詳情 (沒有返回值。) 直接打印出一條預處理語句包含的信息。提供正在使用的 SQL 查詢、所用參數(Params)的數目、參數的清單、參數名、用一個整數表示的參數類型(paramtype)、鍵名或位置、值、以及在查詢中的位置 SQL模板中的占位符不同,打印出來的結果也會不同查看全部
-
PDOStatement::fetchColumn()從結果集中的下一行返回單獨的一列。 //因為每次調用此方法后,記錄指針將自動指向結果集中的下一條記錄(且沒有辦法返回),在此調用時取得將是下一條記錄的對應列數據 echo $stmt->fetchColumn(0); //取第一行第一列數據 echo $stmt->fetchColumn(1); //取第二行第二列數據 echo $stmt->fetchColumn(2); //取第三行第三列數據查看全部
-
$sql='SELECT username,password,email FROM user'; $stmt=$pdo->prepare($sql); $stmt->execute(); //PDOStatement::columnCount()返回結果集中的列數 echo '結果集中的列數一共有:'.$stmt->columnCount(); //PDOStatement::getColumnMeta()返回結果集中一列的元數據(從0開始計數) print_r($stmt->getColumnMeta(0)); //PDOStatement::bindColumn()綁定一列到一個 PHP 變量(相當于給結果集的列起了別名) $stmt->bindColumn(1, $username); $stmt->bindColumn(2,$password); $stmt->bindColumn(3, $email); while($stmt->fetch(PDO::FETCH_BOUND)){ echo '用戶名:'.$username.'-密碼:'.$password.'-郵箱:'.$email.'<hr/>'; } //也可以這么綁定,第一個參數對應SQL查詢語句的列名 $stmt->bindColumn(‘username’, $username); $stmt->bindColumn(‘password’,$password); $stmt->bindColumn(‘email’, $email);查看全部
-
PDOStatement:: bindValue()將變量或者值綁定到SQL模板中(可以為變量,也可以為值) //PDOStatement:: bindValue()參數說明(占位符為[:name]情況)(UP推薦使用方式,不容易亂) $sql="INSERT user(username,password,email) VALUES(:username,:password,:email)"; $stmt=$pdo->prepare($sql); //第一個參數為相應的占位符,第二個參數為綁定變量(或值),第三個變量指定變量類型,(第一,二個參數必填,其他為可選) $stmt->bindValue(':username',$username); $stmt->bindValue(':password',$password); $stmt->bindValue(':email','[email protected]'); $username='imooc1'; $password='imooc1'; $email='[email protected]'; $stmt->execute(); //PDOStatement:: bindValue()參數說明(占位符為[?]情況) $sql="INSERT user(username,password,email) VALUES(?,?,?)”; $stmt=$pdo->prepare($sql); //第一個參數為整型對應SQL模板中的第幾個問號,其他參數和使用條件與[:name]情況相同 $stmt->bindValue(1,$username); $stmt->bindValue(2,$password); $stmt->bindValue(3,'[email protected]'); $username='imooc'; $password='imooc'; $email='[email protected]'; $stmt->execute();查看全部
-
PDOStatement:: bindParam()將變量綁定到SQL模板中(只能綁定變量而不能為確定的值) //PDOStatement:: bindParam()參數說明(占位符為[:name]情況)(UP推薦使用方式,不容易亂) $sql="INSERT user(username,password,email) VALUES(:username,:password,:email)"; $stmt=$pdo->prepare($sql); //第一個參數為相應的占位符,第二個參數為綁定變量(必須為變量而不能直接指定值,因為bindParam()設計時將第二個參數設定為變量的引用[&$參數二]),第三個變量指定變量類型,(第一,二個參數必填,其他為可選) $stmt->bindParam(":username",$username,PDO::PARAM_STR); $stmt->bindParam(":password",$password,PDO::PARAM_STR); $stmt->bindParam(":email",$email); $username='imooc1'; $password='imooc1'; $email='[email protected]'; $stmt->execute(); //PDOStatement:: bindParam()參數說明(占位符為[?]情況) $sql="INSERT user(username,password,email) VALUES(?,?,?)”; $stmt=$pdo->prepare($sql); //第一個參數為整型對應SQL模板中的第幾個問號,其他參數和使用條件與[:name]情況相同 $stmt->bindParam(1,$username,PDO::PARAM_STR); $stmt->bindParam(2,$password,PDO::PARAM_STR); $stmt->bindParam(3,$email); $username='imooc'; $password='imooc'; $email='[email protected]'; $stmt->execute();查看全部
-
$username=$_POST['username']; $password=$_POST['password']; 使用命名(:name)參數來準備SQL語句 $sql="select * from user where username=:username and password=:password"; $stmt=$pdo->prepare($sql); $stmt->execute(array(":username"=>$username,":password"=>$password)); 使用問號(?)參數來準備SQL語句 $sql="select * from user where username=? and password=?"; $stmt=$pdo->prepare($sql); $stmt->execute(array($username,$password));查看全部
-
$stmt=$pdo->query($sql); //PDOStatement對象的方法:rouCount():對于select操作返回的結果集中記錄的條數, //對于INSERT、UPDATE、DELETE返回受影響的記錄的條數 echo $stmt->rowCount(); //PDO對象的quote()方法:給指定字符串加引號,并將字符串中的引號做轉移,過濾字符串中的特殊字符(UP不推薦這種方法過濾注入) $username=$pdo->quote($username); 在之后的SQL語句中將不用給變量在加引號,如下 使用$pdo->quote()后:$sql="select * from user where username='{$username}' and password='{$password}'"; 不使用$pdo->quote():$sql="select * from user where username={$username} and password='{$password}'";查看全部
-
PDO::getAttribute — 取回一個數據庫屬性 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1)//設置數據庫連接屬性中的自動提交功能為1(開啟) //鏈接數據庫時設置數據庫屬性(數據庫屬性存放在一個關聯數組中) $options=array(PDO::ATTR_AUTOCOMMIT=>0,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION); $pdo=new PDO($dsn, $username, $passwd, $options); PDO::setAttribute — 設置一個數據庫屬性 $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT) php在讀雙引號中的內容時,一旦遇到$,就希望找到一個最可能的變量.所以在沒有引起歧義的情況下 echo "PDO::ATTR_$attr: "; php找到變量$attr并解析它(沒有$a,$at,$att.$attr: 變量情況下).所以以上寫法為正確語句.查看全部
-
PDO預處理(下篇) //fetch():得到結果集中的一條記錄 $row=$stmt->fetch(); //默認得到的結果為關聯數組和索引數組 //可以通過設置fetch()方法參數獲得返回結果的不同形式 $row=$stmt->fetch(PDO::FETCH_ASSOC); //關聯數組 $row=$stmt->fetch(PDO::FETCH_BOTH); //(默認)兩種同時獲取 $row=$stmt->fetch(PDO::FETCH_NUM); //索引數組 $row=$stmt->fetch(PDO::FETCH_OBJ); //返回對象 //還有其他形式可以 //fetchAll():得到結果集中的所有記錄 $row=$stmt-> fetchAll(); //默認得到的結果為關聯數組和索引數組 //可以通過設置fetchAll()方法參數獲得返回結果的不同形式(參數設置方法與fetch()類似) //PDOStatement::setFetchMode():設置fetch()或fetchAll()的默認返回值形式(此方法只存在于PDOStatement對象中) //可以通過設置setFetchMode()方法參數改變fetch()或fetchAll()的默認返回值形式(參數設置方法與fetch()類似) PDOStatement中內置有結果集指針,當用fetch()獲取一條結果集中的記錄后,指針將會移動指向下一條記錄,不論是用fetch()或fetchAll()取記錄,將從指針所指記錄開始取查看全部
-
PDO預處理(上篇) PDO::query ($sql)方法返回的結果是PDOStatement實例對象,PDOStatement可以用來操作結果集了。 PDO::prepare()方法返回的也是PDOStatement,但這時PDOStatement代表一條預處理語句,也就是說如果你通過PDO::prepare()查詢,實際上并未執行sql,而是得到一個預處理語句(PDOStatement),然后你調用PDOStatement::execute()方法真正執行。執行結果集保存在保存在調用execute()方法的PDOStatement中 //prepare($sql):準備SQL語句 $stmt=$pdo->prepare($sql); //execute():執行預處理語句 $res=$stmt->execute();查看全部
-
PDO::query($sql),執行SQL語句(不論是增刪改查),返回PDOStatement對象查看全部
-
[PDO] errorCode()和errorInfo()方法查看錯誤信息 $pdo->errorCode():返回數據庫句柄上一次操作相關的SQLSTATE的值 $pdo->errorInfo():返回的錯誤信息的數組,數組中包含3個單元(0=>SQLSTATE,1=>CODE,2=>INFO)查看全部
舉報
0/150
提交
取消