首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP: mysql v mysqli v pdo

PHP: mysql v mysqli v pdo
EN

Stack Overflow用户
提问于 2012-08-24 01:40:14
回答 3查看 10.8K关注 0票数 18

我一直在读一些关于在php中使用mysqli和pdo来使用mysql的问题。

我见过像mysqli or PDO - what are the pros and cons?Moving from mysql to mysqli or pdo?这样的问题,它们都专门处理mysqli v。我对这两种方法中哪种更好并不是很感兴趣。

我想知道为什么应该避免使用mysql_函数。当然,根据PHP的文档http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated,它们正在被弃用的过程中,线程PHP PDO and MySQLi暗示PDO和MySQLi更强大,而线程What is the difference between MySQL, MySQLi and PDO?暗示这些新方法更安全。

总而言之,我想知道mysql_方法中最大的弱点是什么,以及避免它的原因是什么(我猜更具体地说,不仅仅是因为它被弃用了)。我计划更新我的受影响的脚本,并开始好奇为什么这个旧方法会被弃用。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-24 01:47:27

mysql_query函数的设计是这样的:您必须小心地转义注入其中的每一位数据,如果遗漏了一位数据,整个应用程序都会被automatic SQL vulnerability exploit tool破坏。

mysqli和PDO都支持占位符,这是确保您的查询不受SQL注入错误影响所必需的。在所有东西上调用mysql_real_escape_string不仅单调乏味,而且容易出错,这就是问题所在。

mysql函数是PHP早期的产物,与mysqli提供的新的面向对象特性相比,它的局限性要大得多。

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

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

票数 23
EN

Stack Overflow用户

发布于 2012-08-24 01:52:21

从选择MySSQL API @ PHP.net开始

代码语言:javascript
复制
// 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']);

像mysqli和PDO一样创建对象是编写任何现代软件的推荐方式。mysql liblary是为PHP 2.0版本发布的,从那时起就没有进行过重大重写。PHP2.0是1997年发布的,这应该足以解释为什么不使用它。

票数 8
EN

Stack Overflow用户

发布于 2012-08-24 01:42:22

首先,如果您不能正确地手动清理输入,那么mysql函数极易发生SQL注入。mysqli和pdo已经将sql语句选项参数化,从而避免了这种风险。在我看来,它们通常也有更好的编码风格。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12097245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档