PDO訪問方式操作數據庫


  mysqli是專門訪問MySQL數據庫的,不能訪問其它數據庫。PDO可以訪問多種的數據庫,它把操作類合並在一起,做成一個數據訪問抽象層,這個抽象層就是PDO,根據類操作對應的數據庫。mysqli是一個類,PDO也是一個類,只不過PDO這個類功能更加強大。

PDO的功能
1.訪問不同的數據庫
2.自帶事務功能。事務是指同時執行幾條sql語句,但是其中1條語句出了錯無法執行,那么所有的就都執行失敗。
3.防止SQL注入攻擊。

 

1.訪問不同數據庫

下面代碼是訪問MySQL數據庫的,如果訪問其它數據庫,只需要在造對象中更改數據庫驅動mysql,換成其它數據庫的驅動。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<?php
//PDO的用法
//1.造對象
$dsn = "mysql:dbname=text1;host=localhost";
//mysql是指MySQL數據庫的驅動名,加上冒號,冒號后面是數據庫的名稱。
//host是服務器的地址,為localhost。
//如果要使用其它數據庫,要更改數據庫的驅動名。可以從php手冊開面找。
//寫的驅動一定是配好環境的驅動。可以在瀏覽器地址欄里輸入服務器地址localhost查找支持的數據庫驅動。
$pdo = new PDO($dsn,"root","666");
//參數:1.服務器的地址2.數據庫的名稱3.服務器密碼

//寫sql語句
$sql = "update nation set name='獸族' where code='n003'";

//執行sql語句
//$r = $pdo->exec($sql);//返回受影響的條數
?>
</body>
</html>

 

2.事務功能

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<?php
//1.造對象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//設置異常模式,如果出現錯誤,拋個異常出來。2個參數不要加雙引號。
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//寫sql語句
$sql1 = "insert into nation values('noo5','人族')";
$sql2 = "insert into nation values('noo6','精靈族')";

//執行2條sql語句
try//try代表加事務
{
    $pdo->beginTransaction();//啟動事務
    
    $pdo->exec($sql1);
    $pdo->exec($sql2);
    
    $pdo->commit();//提交事務
}
catch(PDOException $e)//抓住出現的異常。$e代表抓住的異常,異常保存在$e里面。
{
    //$e->getMessage();//獲取錯誤信息。
    $pdo->rollBack();//回滾,如果一個地方出現錯誤,回到總體操作之前。
}


?>
</body>
</html>

 

3.防止注入

(1)占位方式為?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<?php
//防止sql注入

//1.造對象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//寫sql語句,預處理語句。
$sql = "insert into nation values(?,?)";//變量先不寫,先用?占住位置。先把這條語句發過去。

//准備sql語句,返回statement對象。
$st = $pdo->prepare($sql);

/*//綁定參數
$st->bindParam(1,$code);//從1開始索引。
$st->bindParam(2,$name);

$code="n002";//也可以在前面賦值。
$name="矮人族";

//提交執行
$st->execute();//調用這個方法就可以執行了,括號里面不用給sql語句了,sql語句已經傳過去了。
*/

$attr = array("n007","魔族");//造一個數組,數組里面要和添加的內容對應起來。這2行相當於上面/**/標記的4行內容。

//提交執行
$st->execute($attr);//直接把數組放在執行的里面。

//預處理里面用?占位的,給數組的時候要給索引數組,並且數組里的內容要和要添加的內容對應起來。

?>

 

</body>
</html>

 

(2)占位方式為name

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<?php
//防止sql注入

//1.造對象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//寫sql語句,預處理語句。使用name占位。
$sql = "insert into nation values(:code,:name)";//前面要加冒號,不加冒號會被當成普通的變量

//准備執行
$st = $pdo->prepare($sql);

/*//綁定參數
$st->bindParam(":code",$code,PDO::PARAM_STR);//PDO::PARAM_STR表示必須是一個字符串
$st->bindParam(":name",$name,PDO::PARAM_STR);

$code="no12";
$name="狼族";

//執行
$st->execute();*/

$attr = array("code"=>"n025","name"=>"蟲族");//name占位,要用關聯數組。

//執行
$st->execute($attr);

?>
</body>
</html>

 

4.讀取數據

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<?php
//1.造對象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//寫sql語句,預處理語句。使用name占位。
$sql = "select * from nation";//前面要加冒號,不加冒號會被當成普通的變量

//准備執行
$st = $pdo->prepare($sql);

//執行
$st->execute();

//讀數據
//var_dump($st->fetch());//輸出結果為第一條,可以用while循環全部讀取出來。
//var_dump($st->fetch(PDO::FETCH_ASSOC));//輸出的是關聯數組
//var_dump($st->fetch());//輸出二維數組
//var_dump($st->fetch(PDO::FETCH_ASSOC));//輸出關聯的二維數組
?>

 

</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM