PDO和MySQLi是否在抽象层下使用MySQL函数?

时间:2012-07-26 07:46:48

标签: php mysql pdo mysqli

免责声明:这个问题严格来说是支持它的mysql和数据库抽象层。

PHP网站指出,使用PHP的mysql_函数非常不受欢迎。它鼓励开发人员使用PDOMySQLi

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

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

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

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

3 个答案:

答案 0 :(得分:2)

PDOMySQLi fucnctions和类方法是对C级API的绑定。通常建议使用此函数,因为预先准备好的语句:in PDOin MySQLi。使用预准备语句是防止SQL注入的好方法。

答案 1 :(得分:2)

  

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

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

  

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

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

答案 2 :(得分:1)

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

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