2013-12-22 69 views
2

我從一本書中學到了PHP,它告訴我要使用PDO對象或sql語句(我不確定這是否是正確的術語,如果不是,我很抱歉)。PDO sql語句和正則sql之間的區別?

當我仰望SQL的東西,有很多時代的我看到這樣的東西:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
if (!mysql_select_db('database_name')) { 
    die('Could not select database: ' . mysql_error()); 
} 
$result = mysql_query('SELECT name FROM work.employee'); 

但在我的代碼,並在書中,我做這樣的東西:

global $db; 
    $query = "SELECT * FROM users WHERE username='$username'"; 
    $results = $db->query($query); 
    $results = $results->fetch(); 

這兩種'風格'有什麼區別?

+0

Upvote爲PHP中的MySQL實踐提供了一個很好的新手問題。 – JakeGould

回答

3

首先,那些是mysql_*(如mysql_query,mysql_connect等)的函數已被棄用,並且在PHP未來版本中將不被支持。所以PDO或Mysqli是與數據庫溝通的首選方式。

PDO準備的語句用於避免SQL注入攻擊。就像在正常的mysql_query你會使用這樣

$query = "SELECT * FROM users WHERE username='$username'"; 
$results = mysql_query($query); 

但在PDO你必須使用類似這樣的

$params = array(':username' => 'test', ':email' => $mail); 

$pdo->prepare(' 
    SELECT * FROM users 
    WHERE username = :username 
    AND email = :email'); 

$pdo->execute($params); 

所以PDO是推薦的方式。欲瞭解更多詳情您可以參考

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

http://php.net/pdo

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

+0

在「So PDO或Mysql優先」的錯字應該有MySQLi – Theraot

+0

抱歉我的錯誤。更正 –

2

的第一個樣式是很久以前寫的,或者是由誰停止學習PHP PHP5出來之前人寫的。 mysql_query已被棄用,並且已經有一段時間了,您不應該在新項目中使用它。

第二個是使用PDO,一個較新的數據庫API。 PDO支持一系列使SQL更輕鬆的工作。

儘管如此,它仍然非常可怕。大多數人會推薦使用參數化查詢(一種預準備語句的形式)將數據從SQL中分離出來。這有助於防止「SQL注入」,這是一個用戶向您提供數據的過程,這些數據會誘騙您的數據庫執行您從未打算過的查詢。

+0

閱讀您的個人資料'關於我'部分 –

+3

是的,這可能是一年或兩年的方式。 :)我已經厭倦了使用舊的搖搖晃晃的廢話的人,即使PHP手冊說不應該使用,然後期待與它的幫助。甚至更多的人用* ext/mysql來回答*,特別是如果問題沒有特別要求的話。 – cHao