4

免责声明:这个问题完全是关于支持它的 mysql 和数据库抽象层。

PHP 网站指出,mysql_强烈建议不要使用 PHP 的功能。相反,它鼓励开发人员使用PDOor MySQLi

这是我的问题:关于 mysql,在所有抽象下,PDO 和 MySQLi 是否只是一个更安全、更面向对象的mysql_函数包装器?

如果这是真的,那么像 CodeIgniter 和 Symfony 这样的框架是不是通过在 MySQLi 之上放置一个层来创建不必要的包装量,然后在原生 PHP 之上放置一个层mysql_

如果不是这样,我想知道为什么不鼓励有经验的开发人员使用,以及在抽象下实际做了mysql_什么。PDOMySQLi

(另外,请不要告诉我去看代码)将给予+100赏金。

4

3 回答 3

2

PDO函数和MySQLi类方法是对 C 级 API 的绑定。由于准备好的语句,通常建议使用此函数:在 PDO中,在 MySQLi 中。使用准备好的语句是防止 SQL 注入的好方法。

于 2012-07-26T07:55:18.083 回答
2

这是我的问题:关于 mysql,在所有抽象下,PDO 和 MySQLi 是否只是 mysql_ 函数的更安全、更面向对象的包装器?

不。就像 xdazz 说的那样,MySQLi 和 PDO 都是用 C 实现的,这意味着它们不只是包装 mysql_* 函数。

如果这是真的,那么像 CodeIgniter 和 Symfony 这样的框架不是通过在 MySQLi 之上放置一个层然后在原生 PHP mysql_ 之上放置一个层来创建不必要的包装量吗?

还有另一个需要考虑的原因:CodeIgniter 和 Symfony 可能在默认接口上创建了一个接口,因为默认接口不够用(从他们的角度来看)。我自己在 PDO 上编写了一个层,它设置了一些默认设置(例如错误模式,因为 PDO 默认情况下是安静的)并完全创建了一个更直观的 API。PDO 是一款非常不错的软件,但它setAttribute( $attr, $value )真的不是我喜欢的。

于 2012-07-26T08:00:52.530 回答
1

不,PDO 和 MySQLi 不是函数的包装器mysql_,它们是在 C 级别实现的,不同的扩展。

试想一下,如果它们是包装器,--with-mysqli等等是没有必要的。

于 2012-07-26T07:49:44.077 回答