php mysql增修删_PHP mysql PDO增、删、查、改
1?建立連接<?php
$dbh=newPDO('mysql:host=localhost;port=3306;?dbname=test',$user,$pass,array(
PDO::ATTR_PERSISTENT=>true
));
?>持久性鏈接PDO::ATTR_PERSISTENT=>true2.?捕捉錯誤<?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()."
";
die();
}
?>3.?事務的?(數據表改成?InnoDB?類型進行操作)<?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();
}
?>
4.?錯誤處理
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//PDO操作數據庫的增刪查改?基本語法
$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));
?>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";
}
?>2.?使用?prepare,?bindParam和?execute?[建議用,同時可以用添加、修改、刪除]
$dbh->prepare($sql);?產生了個PDOStatement對象
PDOStatement->bindParam()
PDOStatement->execute();//可以在這里放綁定的相應變量
?>DO常用方法:PDO::query()主要用于有記錄結果返回的操作(PDOStatement),特別是select操作。
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?...")方法時,獲取記錄的列數。
注解:
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)
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 mysql增修删_PHP mysql PDO增、删、查、改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB课程表分配问题,求助matl
- 下一篇: data后缀文件解码_Java语法进阶1