php中pdo的使用

2021-07-26 16:58:16 字數 3711 閱讀 2680

執行如下**,如果提示引數錯誤,說明pdo已經安裝,如果說明物件不存在,則修改php配置檔案php.ini,取消php_pdo_yourssqlserverhere.extis前面的注釋。

$test=new pdo();
given

in d:\wamp64\www\test\test.php on

line

以上錯誤提示缺少引數,說明pdo安裝成功!

$dsn = 'mysql:dbname=demo;host=localhost;port=3306';

$username = 'root';

$password = '123456';

try catch(pdoexception $e)

在pdo中使用query和exec兩種方法使得對資料庫查詢變得非常簡單。如果你想得到查詢結果的行數exec是非常好用的,因此對select查詢語句是非常有用的。

$statement

=<

* from `student`

where

`class`=1

sql;

$rows

=$db

->query($statement);

如果上面的查詢是正確的,則$rows現在是乙個pdo statement物件,我們可以從這個物件中獲取我們需要的結果和一共查詢到了多少結果集。

如果利用的是mysql資料庫,pdo statement中包含了乙個rowcount的方法可以獲取結果集中的行數,如下**所示:

echo

$rows->rowcount();

foreach($rows->fetchall(pdo::fetch_assoc) as

$row)

pdo也支援fetch方法,這個方法只返回第一條結果。

pdo提供了乙個方法叫做quote,這個方法可以把輸入字串中帶有引號的地方進行特殊字元轉義。

$input= this

is's' a ''

'pretty dange'rous str'ing

$db->quote($input);

//輸出結果:'this is\'s\' a \'

\'\'pretty dange\'rous str\'ing'

pdo可以使用exec()方法實現update,delete和insert 操作,執行後它會返回受影響行數的數量:

$statement

=<

where

`class`=1;

sql;

echo $db

->exec($statement);

儘管exec方法和查詢在php中仍然被大量使用和支援,但是php官網上還是要求大家用預處理語句的方式來替代。為什麼呢?主要是因為:它更安全。預處理語句不會直接在實際查詢中插入引數,這就避免了許多潛在的sql注入。

然而出於某種原因,pdo實際上並沒有真正的使用預處理,它是在模擬預處理方式,在將語句傳給sql伺服器之前會把引數資料插入到語句中,這使得某些系統容易受到sql注入。

如果你的sql伺服器不真正的支援預處理,我們可以很容易的通過如下方式在pdo初始化時傳參來修復這個問題:

$db

->setattribute(pdo::attr_emulate_prepares, false);

下面是我們的第乙個預處理語句:

$statement

=$db

->prepare('select * from student where `name`=? and `class`=?');

$statement2

=$db

->prepare('select * from student where `name`=:name and `class`=:class)';

如上面的**所示,有兩種建立引數的方法,命名的與匿名的(不可以同時出現在乙個語句中)。然後你可以使用bindvalue來敲進你的輸入:

$statement->bindvalue(1, 'cake');

$statement->bindvalue(2, 1);

$statement2->bindvalue(':name', 'user');

$statement2->bindvalue(':class', 1);

注意使用命名引數的時候你要包含進冒號(:)。pdo還有乙個bindparam方法,可以通過引用繫結數值,也就是說它只在語句執行的時候查詢相應數值。

現在剩下的唯一要做的事情,就是執行我們的語句:

$statement

->execute();

$statement2

->execute();

//獲取我們的結果:

$cake

=$statement

->fetch();

$pie

=$statement2

->fetch();

為了避免只使用bindvalue帶來的**碎片,你可以用陣列給execute方法作為引數,像這樣:

$statement->execute(array(1 => 'cake', 2 => 1));

$statement2->execute(array(':name' => 'pie', ':class' => 1));

乙個事務就是執行一組查詢,但是並不儲存他們的影響到資料庫中。這樣做的好處是如果你執行了4條相互依賴的插入語句,當有一條失敗後,你可以回滾使得其他的資料不能夠插入到資料庫中,確保相互依賴的字段能夠正確的插入。你需要確保你使用的資料庫引擎支援事務。但是它並不是回滾所有的型別(例如在mysql中使用drop table),這個方法並不是真正的可靠,我建議盡量避免依賴此方法。

try  catch (exception $e) 

?>

pdo

::attr_default_fetch_mode

你可以選擇pdo將返回的是什麼型別的結果集,如pdo

::fetch_assoc,會允許你使用$result

['column_name'],或者pdo

::fetch_obj,會返回乙個匿名物件,以便你使用$result->column_name

<?php

$dsn = 'mysql:dbname=mysql;host=192.110.1.111;port=3306';

$username = 'ysp';

$password = '***x';

try catch (pdoexception $e)

$statement = "select * from user";

$rows = $pdo->query($statement);

print_r($rows->rowcount());

foreach ($rows->fetchall() as

$row)

在之後的查詢語句的時候就不用每次都設定獲取結果的模式了,是不是一勞永逸!

PHP中PDO函式的使用

寫了個pdo函式的連線 資料庫的連線字串,包含資料庫型別,連線的庫名,連線的位址,連線的埠號,連線的字符集 dsn mysql dbname xx host 127.0.0.1 port x charset utf8 訪問資料庫的使用者名稱 user root 訪問資料庫的密碼 password 建...

PHP中PDO的用法

pdo 資料訪問抽象層 dsn 資料來源 帶有事務功能 dsn mysql host localhost dbname mydb 造pdo物件 pdo new pdo dsn,root 123 設定為異常模式 pdo setattribute pdo attr errmode,pdo errmode...

PHP5 2中PDO的簡單使用

pdo配置 1 確保php版本為5.2.5以上 主要是我用的5.2.5,第一次不知道用的5.1.x的,結果一直搞不好 2 在php.ini中找到dynamic extensions擴充套件部分,去掉extension php pdo.dll前面的分號 3 去掉相應資料庫pdo擴充套件前面的分號,如 ...