切换到mysqli一个好主意?
我正在考虑切换到所有我的PHP项目的mysqli。 我的代码编写的方式(我运行非常简单的网站,并构建了我自己的基本框架,我使用它们)我不应该有太多修改函数和类的问题。
然而,我只听到了有关准备好的语句的积极的事情,请留心一些关于可用的PHP函数的问题,特别是在一段时间内没有简单替换使用mysql_fetch_array。
这听起来有点太好了,所以我想知道是否有人能够强调使用准备语句的一些问题,例如速度和资源使用情况。
如果您习惯将变量附加到查询字符串中,那么对已准备语句的编程需要一些习惯。 MySQL使用位置参数(您的查询将包含替换变量所属的问号)。 最好的办法是把它放到你现有的数据库抽象中。 如果该抽象是正确编写的,那么不应该在包装器外部调用mysql_fetch_array。
解决这个问题的方法就是预先收集所有的行,但是当然假设你不检索1000行并且只是要求第一行。 无论mysqli如何,这都是你应该做出的改变。
最后,一些语句不容易被参数取代,比如使用带有可变数量参数的in('x', 'y', 'z')
语法的查询。 它可以完成,但你可能想要丰富你的数据库抽象,以允许它创建查询并执行它们。
然而,在性能和安全性方面,权衡是绝对值得的。 PHP端的附加处理通常超过了MySQL端查询的缓存执行计划,而且您不受许多最常见的SQL注入漏洞的影响。
希望这会有所帮助,乔
准备好的陈述非常好,一旦你习惯了它们,再次使用转义函数是很痛苦的 。 期。
但是,我曾经使用过的所有数据库库(包括oci8和sqlsrv ...)引入了一个或多个怪癖。 因此,我基本上使用一组简单的自定义类来封装我使用的任何库,这些自定义类以我喜欢的方式提供功能:
WHERE foo = :foo
$params = array('foo' => 33)
$res = $Db->query($sql, $params);
foreach($res as $row)
循环foreach($res as $row)
采用这样的策略使得确切的语法或函数设置不那么重要。
无论如何,虽然这可以通过几乎任何库来实现,但它提供了本地参数绑定(例如,您不必猜测数据类型)就会有所帮助。 而且,像交易这样的一些高级功能不能简单地用普通的mysql函数完成。
PDO可能是一个不错的选择,但其大部分驱动程序基本上被放弃了,所以当你喜欢它的缺陷时,你实际上放松了拥有一个DB无关抽象层的好处。
恕我直言,仅仅是你问的事实表明你应该给mysqli一个机会。
链接地址: http://www.djcxy.com/p/45253.html上一篇: switch to mysqli a good idea?
下一篇: How to maintain color settings when converting EPS to JPEG with ImageMagick