免责声明:这个问题严格来说是关于MySQL和支持它的数据库抽象层。
PHP网站指出,不鼓励使用PHP的mysql_
函数。相反,它鼓励开发人员使用 PDO
或 MySQLi
.
这是我的问题:关于mysql,在所有抽象下,PDO和MySQLi只是mysql_
函数更安全,更面向对象的包装器吗?
如果这是真的,那么像CodeIgniter和Symfony这样的框架不是通过在MySQLi上放置一个层来创建不必要的包装页,然后在本机PHP mysql_
之上放置一个层吗?
如果不是真的,我想知道为什么不鼓励有经验的开发人员使用mysql_
以及PDO
和MySQLi
在抽象下实际做了什么。
(另外,请不要告诉我去看代码(将给予+100赏金。
这是我的问题:关于mysql,在所有抽象下,PDO和MySQLi只是mysql_函数更安全,更面向对象的包装器吗?
不。就像xdazz所说,MySQLi和PDO都是用C实现的,这意味着它们不只是包装mysql_*函数。
如果这是真的,那么像CodeIgniter和Symfony这样的框架不是通过在MySQLi上放置一个层来创建不必要的包装页面,然后在本机PHP mysql_之上放置一个层吗?
还有另一个原因需要考虑:CodeIgniter 和 Symfony 可能在默认接口上创建了一个接口,因为默认接口不够可用(从他们的角度来看(。我自己在PDO上写了一个层,它设置了一些默认设置(例如错误模式,因为PDO默认是安静的(,并完全制作了一个更直观的API。PDO是一个非常不错的软件,但setAttribute( $attr, $value )
不是我的一杯茶,真的。
PDO
和MySQLi
功能和类方法是与C级API的绑定。通常建议使用此函数,因为预准备语句:在PDO中,在MySQLi中。使用预准备语句是防止 SQL 注入的好方法。
不,PDO和MySQLi不是mysql_
函数的包装器,它们是在C级,不同的扩展中实现的。
试想一下,如果它们是包装纸,--with-mysqli
等等就没有必要了。