PHP:mysql v mysqli v pdo

Vla*_*lad 18 php mysql mysqli pdo

我一直在阅读有关使用mysqli与pdo在php中使用mysql的一些问题.

我见过诸如mysqli或PDO之类的问题 - 有什么优缺点?或者从mysql迁移到mysqli或pdo?,两者都专门处理mysqli v pdo.我对这两种方法中的哪一种更好更感兴趣.

我想知道为什么应该避免mysql_函数.当然,他们正在按照PHP的文档http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated弃用,PHP PDO和MySQLi的线程 建议PDO和MySQLi更强大,线程MySQL,MySQLi和PDO有什么区别?暗示这些新方法更安全.

总的来说,我想知道mysql_方法的主要缺点是什么,以及避免它的原因(我猜更具体而不仅仅是因为它已被弃用).我打算更新受影响的脚本,并对这个旧方法被弃用的原因感到好奇.

谢谢!

tad*_*man 23

mysql_query函数的设计是这样的,你必须小心地逃避你注入的每一个数据,如果你错过了一个整个应用程序可以被自动SQL漏洞利用工具破坏.

两者mysqli和PDO都支持占位符,这些占位符是确保您的查询免受SQL注入错误所必需的.呼吁mysql_real_escape_string一切不仅乏味,而且容易出错,而这就是出现问题的地方.

这些mysql函数是PHP早期的产品,并且比mysqli作为选项或PDO设计提供的新的面向对象特性更加有限.

使用这两个新接口之一有很多很好的理由,但最重要的是该mysql_query功能太危险而无法在生产代码中使用.有了它,你将永远是一个错误远离一些非常严重的问题.

有充足的密码和信用卡号码的数据库不断出现的原因.拥有明显的SQL注入点使得完全接管站点变得非常容易.


Hen*_*son 8

从选择MySSQL API @ PHP.net:

// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

// mysql
$c = mysql_connect("example.com", "user", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
Run Code Online (Sandbox Code Playgroud)

创建一个对象,如mysqli和PDO,是编写任何现代软件的推荐方法.mysql liblary是针对PHP 2.0版发布的,从那时起就没有重大改写.PHP 2.0于1997年发布,应该足以解释为什么不使用它.