《PHP實戰:php中mysql連接方式PDO使用詳解》要點:
本文介紹了PHP實戰:php中mysql連接方式PDO使用詳解,希望對您有用。如果有疑問,可以聯系我們。
PHP教程PDO常用辦法:
PHP教程PDO::query()主要用于有記錄結果返回的操作(PDOStatement),特別是select操作.
PHP教程PDO::exec()主要是針對沒有結果集合返回的操作.如insert,update等操作.返回影響行數.
PDO::lastInsertId()返回上次插入操作最后一條ID,但要注意:如果用insert into tb(col1,col2) values(v1,v2),(v11,v22)..的方式一次插入多條記錄,lastinsertid()返回的只是第一條(v1,v2)插入時的ID,而不是最后一條記錄插入的記錄ID.
PDOStatement::fetch()是用來獲取一條記錄.配合while來遍歷.
PDOStatement::fetchAll()是獲取所有記錄集到一個中.
PDOStatement::fetchcolumn([int column_indexnum])用于直接拜訪列,參數column_indexnum是該列在行中的從0開始索引值,但是,這個方法一次只能取得同一行的一列,只要執行一次,就跳到下一行.因此,用于直接拜訪某一列時較好用,但要遍歷多列就用不上.
PDOStatement::rowcount()適用于當用query("select ...")方法時,獲取記錄的條數.也可以用于預處理中.$stmt->rowcount();
PDOStatement::columncount()適用于當用query("select ...")方法時,獲取記錄的列數.
PHP教程注解:
1、選fetch還是fetchall?
小記錄集時,用fetchall效率高,減少從數據庫檢索次數,但對于大結果集,用fetchall則給系統帶來很大負擔.數據庫要向WEB前端傳輸量太大反而效率低.
2、fetch()或fetchall()有幾個參數:
mixed pdostatement::fetch([int fetch_style [,int cursor_orientation [,int cursor_offset]]])
array pdostatement::fetchAll(int fetch_style)
PHP教程fetch_style參數:
■$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTH是默認的,可省,返回關聯和索引.
■$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOC參數決定返回的只有關聯數組.
■$row=$rs->fetchAll(PDO::FETCH_NUM); 返回索引數組
■$row=$rs->fetchAll(PDO::FETCH_OBJ); 如果fetch()則返回對象,如果是fetchall(),返回由對象組成的二維數組
代碼如下:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', '');?
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);?
$dbh->exec('set names utf8');
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";? $stmt = $dbh->prepare($sql);? $stmt->execute(array(':login'=>'kevin2',':password'=>''));?
echo $dbh->lastinsertid();?
/*修改*/
$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";?
$stmt = $dbh->prepare($sql);?
$stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9'));?
echo $stmt->rowCount();
/*刪除*/
$sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin%?
$stmt = $dbh->prepare($sql);?
$stmt->execute();?
echo $stmt->rowCount();?
/*查詢*/
$login = 'kevin%';?
$sql = "SELECT * FROM `user` WHERE `login` LIKE :login";?
$stmt = $dbh->prepare($sql);?
$stmt->execute(array(':login'=>$login));?
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){????
?print_r($row);?
}?
print_r( $stmt->fetchAll(PDO::FETCH_ASSOC));
?>
PHP教程1 建立連接
代碼如下:
?<?php
?$dbh=newPDO('mysql:host=localhost;port=3306; dbname=test',$user,$pass,array(
?PDO::ATTR_PERSISTENT=>true
?));
??>
PHP教程持久性鏈接PDO::ATTR_PERSISTENT=>true
PHP教程2. 捕捉錯誤
代碼如下:
?<?php
?try{
?$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);
?$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
?$dbh->exec("SET CHARACTER SET utf8");
?$dbh=null; //斷開連接
?}catch(PDOException$e){
?print"Error!:".$e->getMessage()."<br/>";
?die();
?}
??>
PHP教程3. 事務的
代碼如下:
<?php
try{
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();//開啟事務
$dbh->exec("insertintostaff(id,first,last)values(23,'Joe','Bloggs')");
$dbh->exec("insertintosalarychange(id,amount,changedate)
values(23,50000,NOW())");
$dbh->commit();//提交事務
}catch(Exception$e){
$dbh->rollBack();//錯誤回滾
echo"Failed:".$e->getMessage();
}
?>
PHP教程4. 錯誤處理
PHP教程a. 靜默模式(默認模式)
代碼如下:
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //不顯示錯誤
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//顯示警告錯誤,并繼續執行
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//產生致命錯誤,PDOException
代碼如下:
?<?php
?try{???
? $dbh = new PDO($dsn, $user, $password);???
? $sql = 'Select * from city where CountryCode =:country';???
? $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);???
? $stmt = $dbh->prepare($sql);???
? $stmt->bindParam(':country', $country, PDO::PARAM_STR);???
? $stmt->execute();???
? while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {?????
?? print $row['Name'] . "/t";???
? }?
?}?? // if there is a problem we can handle it here?
?catch (PDOException $e)? {???
? echo 'PDO Exception Caught.? ';???
? echo 'Error with the database: <br />';???
? echo 'SQL Query: ', $sql;??
? echo 'Error: ' . $e->getMessage();?
?}
??>
PHP教程1. 使用 query()
代碼如下:
<?php
$dbh->query($sql); 當$sql 中變量可以用$dbh->quote($params); //轉義字符串的數據
$sql = 'Select * from city where CountryCode ='.$dbh->quote($country);?
foreach ($dbh->query($sql) as $row)?? {???
?print $row['Name'] . "/t";???
?print $row['CountryCode'] . "/t";???
?print $row['Population'] . "/n";
}
?>
PHP教程2. 使用 prepare, bindParam和 execute [建議用,同時可以用添加、修改、刪除]
代碼如下:
<?php
$dbh->prepare($sql); 產生了個PDOStatement對象
PHP教程PDOStatement->bindParam()
PHP教程PDOStatement->execute();//可以在這里放綁定的相應變量
?>
PHP教程3. 事物
代碼如下:
<?php
?try {?
? $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');?
? $dbh->query('set names utf8;');?
? $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);?
? $dbh->beginTransaction();?
? $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");?
? $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);");
? $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");?
? $dbh->commit();
?} catch (Exception $e) {?
? $dbh->rollBack();?
? echo "Failed: " . $e->getMessage();?
?}?
?>
PHP教程以上就是關于PHP中pdo的相關用法的全部內容了,希望本文能對大家有所贊助,也希望大家能夠喜歡.
維易PHP培訓學院每天發布《PHP實戰:php中mysql連接方式PDO使用詳解》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/12195.html