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