簡介咱一起來看看PDO類。PDO是PHP Data Objects的縮寫,它被描述為“在PHP中訪問數據庫的輕量級,兼容性的接口”。盡管它的名字不咋好聽,但PDO是一個在PHP中訪問數據庫會讓人喜愛的方式。 與html' target='_blank'>MySQLi的不同MySQLi和PDO很相似,都有兩方面主要區別:1.MySQLi只能訪問MySQL,但PDO可以訪問12種不同的數據庫2.PDO沒有普通函數調用(mysqli_*functions) 開始步驟首先,你得確定一下你的PHP是否安裝了PDO插件。你可以用$test=new PDO()的結果來測試。如果提示說是參數不匹配,那證明已經安裝了PDO插件,如果說是對象不存在,你得先確認一下在pho.ini中php_pdo_yourssqlserverhere.extis是否被注釋掉了。如果沒有這句話,那你得安裝PDO了,這里就不啰嗦了。連接現在我們確認服務器已經工作,開始連接數據庫吧:
$dsn = 'mysql:dbname=demo;host=localhost;port=3306';$username = 'root';$password = 'password_here';try { $db = new PDO($dsn, $username, $password); // also allows an extra parameter of configuration} catch(PDOException $e) { die('Could not connect to the database: br/ ' . $e);除$dsn之外,所有語句和變量都能自我解釋。DSN指的是數據源名稱,有多種輸入類型。最常見的一種是我們剛剛用的這種,PHP網址解釋了 其他可用的DSN 。你可以省去DSN的其他額外參數,只需要在數據庫驅動后面帶個冒號,比如(mysql:)。在這種情況下PDO將會嘗試連接到本地數據庫。就像當你使用MySQLi時需要在查詢中指定數據庫名稱一樣。最后一件你需要注意的事情就是我們用try-catch塊包裹了我們的初始化對象。PDO連接失敗的時候將會拋出PDOException異常而不是查詢失敗的時候。如果你愿意你可以使用下面代碼$db=line來選擇異常的模式。
$input: this is's' a '''pretty dange'rous str'ing在轉義后,最終得到下面結果:
$db- quote($input): 'this is/'s/' a /'/'/'pretty dange/'rous str/'ing'exec()正如上面提到的,你可以使用exec()方法實現UPDATE,DELETE和INSERT 操作,執行后它會返回受影響行數的數量:
$statement = SQL DELETE FROM `foods` WHERE `healthy` = 1;echo $db- exec($statement); // outputs number of deleted rows預處理語句盡管exec方法和查詢在PHP中仍然被大量使用和支持,但是PHP網址上還是要求大家用預處理語句的方式來替代。為什么呢?主要是因為:它更安全。預處理語句不會直接在實際查詢中插入參數,這就避免了許多潛在的SQL注入。然而出于某種原因,PDO實際上并沒有真正的使用預處理,它是在模擬預處理方式,在將語句傳給SQL服務器之前會把參數數據插入到語句中,這使得某些系統容易受到SQL注入。如果你的SQL服務器不真正的支持預處理,我們可以很容易的通過如下方式在PDO初始化時傳參來修復這個問題:
$statement = $db- prepare('SELECT * FROM foods WHERE `name`= AND `healthy`= $statement2 = $db- prepare('SELECT * FROM foods WHERE `name`=:name AND `healthy`=:healthy)';正如你所見,有兩種創建參數的方法,命名的與匿名的(不可以同時出現在一個語句中)。然后你可以使用bindValue來敲進你的輸入: