2013-12-22 33 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