PDO錯(cuò)誤處理三種模式
創(chuàng)新互聯(lián)專注于海城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供海城營銷型網(wǎng)站建設(shè),海城網(wǎng)站制作、海城網(wǎng)頁設(shè)計(jì)、海城網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造海城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供海城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
/* * 數(shù)據(jù)庫抽象層PDO * 一個(gè) DSN 由 PDO 驅(qū)動(dòng)名、緊隨其后的冒號(hào)、以及具體 PDO 驅(qū)動(dòng)的連接語法組成。 * PDO::ERRMODE_SILENT * PDO::ERRMODE_WARNING * PDO::ERRMODE_EXCEPTION * * PDO中的執(zhí)行SQL語句的方法 * 1.exec() 用來處理非結(jié)果集的 insert update delete create 返回影響行 * 2.query() 用來處理有結(jié)果集的 select desc show * * 兩種都可以 * $pdo->exec('set names utf8'); * $pdo->query('set names utf8'); * */ //MySQL_connect('localhost','root','root'); // mysql_select_db('test'); $dsn = 'mysql:dbname=test;host=localhost'; $username = 'root'; $passwd = 'root'; $options = array( PDO::ATTR_AUTOCOMMIT=>true, PDO::ATTR_PERSISTENT=>true ); try{ $pdo = new PDO($dsn, $username, $passwd, $options); }catch(PDOException $e){ echo "數(shù)據(jù)庫連接失敗:".$e->getMessage(); exit; } echo '創(chuàng)建PDO對(duì)象成功!'; echo $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION).'<br/>'; echo $pdo->getAttribute(PDO::ATTR_SERVER_VERSION).'<br/>'; echo $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT).'<br/>'; echo $pdo->getAttribute(PDO::ATTR_CASE).'<br/>'; echo $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS ).'<br/>'; echo $pdo->getAttribute(PDO::ATTR_DRIVER_NAME).'<br/>'; echo $pdo->getAttribute(PDO::ATTR_PERSISTENT).'<br/>'; /* $query = "delete from helloworld"; $affected_rows = $pdo->exec($query); //PDO的錯(cuò)誤處理模式(默認(rèn)不提示,我們可能看不到問題)PDO::ERRMODE_SILENT if(!$affected_rows){ echo $pdo->errorCode(); echo '<br/>'; echo '<pre>'; print_r($pdo->errorInfo()); echo '</pre>'; } //警告模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); echo $pdo->getAttribute(PDO::ATTR_ERRMODE); */ //異常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try{ //使用PDO中的方法執(zhí)行語句 //插入 $query = "insert into users(username,password,email) values('xiaowang','123','xiaoming@163.com')"; $affected_rows = $pdo->exec($query); echo $pdo->lastInsertId(); //查詢 $query = "select * from users"; $result = $pdo->query($query); var_dump($result); }catch (PDOException $e){ echo '錯(cuò)誤的原因:'.$e->getMessage(); }
PDO事務(wù)處理
/* * PDO事務(wù)處理 */ $dsn = 'mysql:dbname=test;host=localhost'; $username = 'root'; $passwd = 'root'; $options = array( PDO::ATTR_AUTOCOMMIT=>true, PDO::ATTR_PERSISTENT=>true ); try{ //創(chuàng)建對(duì)象 $pdo = new PDO($dsn, $username, $passwd, $options); //設(shè)置錯(cuò)誤使用異常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //關(guān)閉自動(dòng)提交(使用事務(wù)第一步) $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false); }catch(PDOException $e){ echo "數(shù)據(jù)庫連接失敗:".$e->getMessage(); exit; } try{ //開啟一個(gè)事務(wù) $pdo->beginTransaction(); $price = 50; $statement = "update demo set salary=salary-{$price} where id=1"; $a=$pdo->exec($statement); if($a>0){ echo '轉(zhuǎn)出成功!'; }else{ throw new PDOException('轉(zhuǎn)出失??!'); } $statement = "update demo set salary=salary+{$price} where id=3"; $b=$pdo->exec($statement); if($b>0){ echo '轉(zhuǎn)入成功!'; }else{ throw new PDOException('轉(zhuǎn)入失??!'); } echo '交易成功!<br/>'; //提交以上的操作 $pdo->commit(); }catch (PDOException $e){ echo '錯(cuò)誤的原因:'.$e->getMessage(); echo '交易失??!<br/>'; //撤銷所有的操作 $pdo->rollBack(); } //運(yùn)行完成后開啟自動(dòng)提交 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, true);
PDO對(duì)預(yù)處理語句
/* * PDO對(duì)預(yù)處理語句 * 1.效率問題 編譯次數(shù) * 2.安全性問題 防止SQL注入 1 or 1='1' * $query = "delete from demo where id='{$_GET['id']}' "; * * */ $dsn = 'mysql:dbname=test;host=localhost'; $username = 'root'; $passwd = 'root'; $options = array( PDO::ATTR_AUTOCOMMIT=>true, PDO::ATTR_PERSISTENT=>true ); try{ //創(chuàng)建對(duì)象 $pdo = new PDO($dsn, $username, $passwd, $options); //設(shè)置錯(cuò)誤使用異常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo "數(shù)據(jù)庫連接失敗:".$e->getMessage(); exit; } try{ $statement = "insert into users(username,password,email) values(?,?,?)";// ?表示占位 //直接給數(shù)據(jù)庫管理系統(tǒng)并執(zhí)行 //$pdo->query($statement); //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行 $pdostatement=$pdo->prepare($statement); //綁定參數(shù)(?) 將問號(hào)和一個(gè)變量關(guān)聯(lián)起來 對(duì)于使用問號(hào)占位符的預(yù)處理語句,應(yīng)是以1開始索引的參數(shù)位置。 $pdostatement->bindParam(1, $username); $pdostatement->bindParam(2, $password); $pdostatement->bindParam(3, $email); //給變量賦值 $username = 'lisiming1'; $password = '1234'; $email = 'lisiming@163.com'; //PDOStatement::execute — 執(zhí)行一條預(yù)處理語句 $pdostatement->execute(); $username = 'lisiming2'; $password = '1234'; $email = 'lisiming@163.com'; $pdostatement->execute(); }catch (PDOException $e){ echo '錯(cuò)誤的原因:'.$e->getMessage(); } ======================================================================================= /* * PDO對(duì)預(yù)處理語句 * 1.效率問題 編譯次數(shù) * 2.安全性問題 防止SQL注入 1 or 1='1' * $query = "delete from demo where id='{$_GET['id']}' "; * * */ $dsn = 'mysql:dbname=test;host=localhost'; $username = 'root'; $passwd = 'root'; $options = array( PDO::ATTR_AUTOCOMMIT=>true, PDO::ATTR_PERSISTENT=>true ); try{ //創(chuàng)建對(duì)象 $pdo = new PDO($dsn, $username, $passwd, $options); //設(shè)置錯(cuò)誤使用異常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo "數(shù)據(jù)庫連接失敗:".$e->getMessage(); exit; } try{ $statement = "insert into users(username,password,email) values(:username,:password,:email)";// :name 形式的參數(shù)名 //直接給數(shù)據(jù)庫管理系統(tǒng)并執(zhí)行 //$pdo->query($statement); //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行 $pdostatement=$pdo->prepare($statement); //綁定參數(shù)(?) 將問號(hào)和一個(gè)變量關(guān)聯(lián)起來 對(duì)于使用問號(hào)占位符的預(yù)處理語句,應(yīng)是以1開始索引的參數(shù)位置。 $pdostatement->bindParam(':username', $username,PDO::PARAM_STR); $pdostatement->bindParam(':password', $password,PDO::PARAM_STR); $pdostatement->bindParam(':email', $email,PDO::PARAM_STR); //給變量賦值 $username = 'lisiming3'; $password = '1234'; $email = 'lisiming@163.com'; //PDOStatement::execute — 執(zhí)行一條預(yù)處理語句 $pdostatement->execute(); $username = 'lisiming4'; $password = '1234'; $email = 'lisiming@163.com'; $pdostatement->execute(); }catch (PDOException $e){ echo '錯(cuò)誤的原因:'.$e->getMessage(); } ======================================================================================= $statement = "insert into users(username,password,email) values(?,?,?)"; //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行 $pdostatement=$pdo->prepare($statement); $pdostatement->execute(array('xiaoli','123','xiaoli@163.com')); ======================================================================================= $statement = "insert into users(username,password,email) values(:username,:password,:email)"; //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行 $pdostatement=$pdo->prepare($statement); $pdostatement->execute(array('username'=>'xiaoli1','password'=>'1123aa','email'=>'xiaoli1@163.com')); ======================================================================================= /* * PDO對(duì)預(yù)處理語句 * 1.效率問題 編譯次數(shù) * 2.安全性問題 防止SQL注入 1 or 1='1' * $query = "delete from demo where id='{$_GET['id']}' "; * fetch() * fetchAll() * setFetchMode() * */ $dsn = 'mysql:dbname=test;host=localhost'; $username = 'root'; $passwd = 'root'; $options = array( PDO::ATTR_AUTOCOMMIT=>true, PDO::ATTR_PERSISTENT=>true ); try{ //創(chuàng)建對(duì)象 $pdo = new PDO($dsn, $username, $passwd, $options); //設(shè)置錯(cuò)誤使用異常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo "數(shù)據(jù)庫連接失敗:".$e->getMessage(); exit; } try{ $statement = "select * from users where id > ? and id < ?"; //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行 $pdostatement=$pdo->prepare($statement); $pdostatement->execute(array(3,6)); //設(shè)置結(jié)果的模式 $pdostatement->setFetchMode(PDO::FETCH_NUM); echo '<table border="1" width="800" align="center">'; while(list($id,$username,$password,$email) = $pdostatement->fetch()){ echo '<tr>'; echo '<td>'.$id.'</td>'; echo '<td>'.$username.'</td>'; echo '<td>'.$password.'</td>'; echo '<td>'.$email.'</td>'; echo '</tr>'; } echo '</table>'; }catch (PDOException $e){ echo '錯(cuò)誤的原因:'.$e->getMessage(); } ======================================================================================= //綁定欄目 $pdostatement->bindColumn(1, $id); $pdostatement->bindColumn(2, $username); $pdostatement->bindColumn(3, $password); $pdostatement->bindColumn(4, $email); ======================================================================================= //綁定欄目 $pdostatement->bindColumn('id', $id); $pdostatement->bindColumn('username', $username); $pdostatement->bindColumn('password', $password); $pdostatement->bindColumn('email', $email);
分享文章:PHPPDO事務(wù)處理預(yù)處理高洛峰細(xì)說PHP
轉(zhuǎn)載注明:http://jinyejixie.com/article42/jopiec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站建設(shè)、用戶體驗(yàn)、品牌網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)