PDO 連接 MySQL 實例
PDO 應(yīng)用在 12 種不同數(shù)據(jù)庫中,所以我們直接只用PDO連接數(shù)據(jù)庫,一勞永逸!在這里我們需要根據(jù)PHP的手冊中進(jìn)行學(xué)習(xí).
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
$conn = new PDO(DSN,USER_NAME,PASSWORD);
echo "連接成功";
}catch (PDOException $e){
echo $e->getMessage();
}finally{
$conn = null;
echo "關(guān)閉數(shù)據(jù)庫連接";
}
?>
注意在以上 PDO 實例中我們已經(jīng)指定了數(shù)據(jù)庫 (myDB)。PDO 在連接過程需要設(shè)置數(shù)據(jù)庫名。如果沒有指定,則會拋出異常。
PDO的屬性獲取和設(shè)置
異常錯誤處理的模式PDO::ATTR_ERRMODE:錯誤報告
- 默認(rèn)的錯誤模式(不提示,我們看到的問題會被自動忽略,僅設(shè)置錯誤代碼)
- 警告模式 : PDO::ERRMODE_WARNING
- 異常模式(推薦) PDO::ERRMODE_EXCEPTION: 拋出 exceptions 異常。
使用PDO執(zhí)行SQL語句
執(zhí)行SQL語句的方法主要有兩種:
- exec() 主要用來處理非結(jié)果集的 insert update delete create 等
- query() 主要用來處理有結(jié)果集的語句 select desc show等
插入數(shù)據(jù)
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES ('wukong','123','悟空')";
$rows = $pdo->exec($sql);
//返回主鍵方法
echo "影響的行數(shù)為:".$rows.",獲取主鍵ID:".$pdo->lastInsertId();
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
插入多條SQL語句
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//4.關(guān)閉自動提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
//5.開啟事務(wù)
$pdo->beginTransaction();
//設(shè)置多條SQL語句
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES ('bajie','123','八戒')";
$rows = $pdo->exec($sql);
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES ('tangseng','ddddd','唐僧')";
$rows = $pdo->exec($sql);
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES ('shaseng','123','沙僧')";
$rows = $pdo->exec($sql);
//6.事務(wù)提交
$pdo->commit();
//7.回復(fù)自動提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
}catch (PDOException $e){
$pdo->rollBack();
echo $e->getMessage();
exit;
}
?>
提示: 使用 PDO 的最大好處是在數(shù)據(jù)庫查詢過程出現(xiàn)問題時可以使用異常類來 處理問題。如果 try{ } 代碼塊出現(xiàn)異常,腳本會停止執(zhí)行并會跳到第一個 catch(){ } 代碼塊執(zhí)行代碼。 在以上捕獲的代碼塊中我們輸出了 SQL 語句并生成錯誤信息。
添加大量數(shù)據(jù)參考博文: http://www.cnblogs.com/zlx7/p/4816247.html
PDO 中的預(yù)處理語句
索引數(shù)組綁定數(shù)據(jù)
我們在 PDO 中使用了預(yù)處理語句并綁定參數(shù):
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES (?,?,?)";
$ps = $pdo->prepare($sql);
//數(shù)據(jù)綁定
$ps->bindParam(1,$account);
$ps->bindParam(2,$password);
$ps->bindParam(3,$user_name);
//設(shè)置數(shù)據(jù)
$account = "liu'bei";
$password="1234567890abcdefg";
$user_name="劉備";
//執(zhí)行SQL語句
$ps->execute();
//返回主鍵方法
echo "獲取主鍵ID:".$pdo->lastInsertId();
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
索引數(shù)組綁定數(shù)據(jù) - 簡寫方式
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES (?,?,?)";
$ps = $pdo->prepare($sql);
//執(zhí)行SQL語句 --- 簡寫方式
$ps->execute(array("zhangfei","123456","張飛"));
//返回主鍵方法
echo "獲取主鍵ID:".$pdo->lastInsertId();
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
關(guān)聯(lián)數(shù)組綁定數(shù)據(jù)
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES (:account,:pwd,:user_name)";
$ps = $pdo->prepare($sql);
//數(shù)據(jù)綁定
$ps->bindParam("account",$account);
$ps->bindParam("pwd",$password);
$ps->bindParam("user_name",$user_name);
//設(shè)置數(shù)據(jù)
$account = "caochao";
$password="1234567890abcdefg";
$user_name="曹操";
//執(zhí)行SQL語句
$ps->execute();
//返回主鍵方法
echo "獲取主鍵ID:".$pdo->lastInsertId();
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
關(guān)聯(lián)數(shù)組綁定數(shù)據(jù) -- 簡寫方式
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES (:account,:password,:user_name)";
$ps = $pdo->prepare($sql);
//執(zhí)行SQL語句 --- 簡寫方式
$ps->execute(array("account"=>"guanyu","password"=>"123123","user_name"=>"關(guān)羽"));
//返回主鍵方法
echo "獲取主鍵ID:".$pdo->lastInsertId();
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
簡化客戶端傳遞數(shù)據(jù) - 有約定
客戶端傳遞的數(shù)據(jù)名稱和關(guān)聯(lián)數(shù)組的KEY保持一致即可
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "INSERT INTO sys_user(account,password,user_name) VALUES (:account,:password,:user_name)";
$ps = $pdo->prepare($sql);
//執(zhí)行SQL語句
$ps->execute($_GET);
//返回主鍵方法
echo "獲取主鍵ID:".$pdo->lastInsertId();
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
演示圖解
PDO 中的預(yù)處理查詢語句
列表:返回數(shù)組形式
<?php
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "SELECT user_id,account,password,user_name FROM sys_user";
$ps = $pdo->prepare($sql);
//執(zhí)行SQL語句
$ps->execute();
//可以設(shè)置結(jié)果集的模式,默認(rèn)情況下支持索引和關(guān)聯(lián)兩種形式
$ps->setFetchMode(PDO::FETCH_NUM);
echo "<table border='1' width='300' align='center'>";
while(list($user_id,$account,$password,$user_name) = $ps -> fetch()){
echo "<tr>";
echo "<td>".$user_id."</td>";
echo "<td>".$account."</td>";
echo "<td>".$password."</td>";
echo "<td>".$user_name."</td>";
echo "</tr>";
}
echo "</table>";
/*echo "顯示全部數(shù)據(jù)";
echo "<hr/>";
echo "<pre>";
print_r($ps->fetchAll());
echo "</pre>";*/
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
列表:存儲為一個對象
<?php
require_once "User.class.php";
const DSN = "mysql:host=127.0.0.1:3306;dbname=shxt";
const USER_NAME = "root";
const PASSWORD = "";
try{
//1.創(chuàng)建PDO對象
$pdo = new PDO(DSN,USER_NAME,PASSWORD);
//2.設(shè)置編碼格式
$pdo->exec("SET names utf8");
//3.設(shè)置錯誤使用的異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
echo $e->getMessage();
exit;
}
try{
//使用PDO中的方法執(zhí)行SQL語句
$sql = "SELECT user_id,account,password,user_name FROM sys_user";
$ps = $pdo->prepare($sql);
//執(zhí)行SQL語句
$ps->execute();
//存儲為一個對象
$user = new User();
$ps->setFetchMode(PDO::FETCH_INTO,$user);
echo "<table border='1' width='300' align='center'>";
while($ps -> fetch()){
echo "<tr>";
echo "<td>".$user->getUserId()."</td>";
echo "<td>".$user->getAccount()."</td>";
echo "<td>".$user->getPassword()."</td>";
echo "<td>".$user->getUserName()."</td>";
echo "</tr>";
}
echo "</table>";
/*echo "顯示全部數(shù)據(jù)";
echo "<hr/>";
echo "<pre>";
print_r($ps->fetchAll());
echo "</pre>";*/
}catch (PDOException $e){
echo "錯誤原因為:".$e->getMessage();
exit;
}
?>
User.class.php
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017/9/2
* Time: 10:38
*/
class User
{
private $user_id;
private $account;
private $password;
private $user_name;
//省略getter和setter方法
}
推薦文章 : https://sjolzy.cn/PDO-query-results-achieved-in-many-ways.html