切换到mysqli还是留在mysql?

时间:2011-08-26 14:55:29

标签: php mysql mysqli

我们这里的应用程序已经开发(现在已投入生产)一年多了。总共有500多个mysql_*来电。

是否值得将代码中mysql_*所有切换为mysqli_*

是否值得追逐可能(并且很可能会)出现的所有错误?

我从这样的问题中看到:Changing this from MySQL to MySQLi?只是在每次i调用后添加mysql*会导致我出现很多错误。值得我花时间吗?

mysql_*可能会长期存在(甚至在贬低的谣言中),所以任何程序员都有时间有条不紊地切换它真的值得吗?

See also this discussion

7 个答案:

答案 0 :(得分:4)

在我看来,MySQLi的好处在于它以面向对象的方式使用,并且使用预处理语句。你也可以使用程序风格获得一些额外的多功能性,例如围绕事务处理的好的包装器函数,但我认为不足以证明你需要重写大量的代码才能使用它们。

如果您要努力转换为OO代码或准备好的语句,您也可以转换为更灵活的PDO而不是MySQLi。

2013年1月更新

刚刚找到了这个旧的答案,并且在2011年8月的评论帖子中,我说将mysql_query()调用mysqli_query()转换为mysql_*()是不值得的。现在 IS 开始向这个方向移动是必要的,因为{{1}}扩展在PHP 5.5之后已被弃用,最终将被删除。

答案 1 :(得分:4)

引用manual for ext/mysqli

  

mysqli扩展有许多好处,对mysql扩展的关键改进是:

     
      
  • 面向对象的界面
  •   
  • 支持准备好的陈述
  •   
  • 支持多种语句
  •   
  • 支持交易
  •   
  • 增强的调试功能
  •   
  • 嵌入式服务器支持
  •   
     

注意:如果您使用的是MySQL 4.1.3或更高版本,强烈建议您使用此扩展程序。

如果你只需要其中一个功能并且可以负担重构,那么是的,去吧。如果您不需要任何这些功能,那么就不要这样做。如果没有任何好处,没有理由重构。

On a sidenote, the rumors are true. ext/mysql will likely be deprecated(虽然在撰写本文时没有人能说出来。它肯定不会被推荐用于5.4。它很可能永远作为pecl扩展版提供)无论如何,你不应该开始任何具有ext / mysql的新项目,当你有一个优秀的扩展开始时。

另见http://blog.ulf-wendel.de/2012/php-mysql-why-to-upgrade-extmysql/

答案 2 :(得分:1)

MySQLi比MySQL有一些性能优势。实际上,建议使用MySQLi而不是MySQL。你也可以做程序风格。

您可以创建应用的新分支,并将代码更改为mysqli_*个功能。这应该是非常简单的,在这样做的同时,您将检查您的数据库访问代码,这可能有助于在切换到mysqli后继续重构。如果这太麻烦了,您已经从数据库访问代码中的客户端库的改进版本中受益。

答案 3 :(得分:1)

ext / mysql的弃用不是谣言。

但是,这不是你真正的问题。

您的主要问题是您在整个代码中使用裸API调用,而不是使用一些智能库来处理SQL查询。

所以,你最好开始开发这样一个库或获得一个现成的库,然后重写你的代码以使用它的调用。

难道你没有看到所有这些重复的东西

$res=mysql_query("SELECT STUFF");
while($row = mysql_fetch){
    $var=$row['col'];
}

难以置信的无聊? 为什么不使用像

这样的单线程
$data = $db->getRow("SELECT stuff");

哪个更短,可以有很多功能,如查询记录,计数,调试,错误处理等等?

并且,作为使用此类库的副作用,您需要更改任何API调用的唯一位置将只是此库代码。

答案 4 :(得分:0)

在我看来,你不应该在你的逻辑中直接使用mysql_ *函数。你应该写一个包装器。因此,当您想要将mysql_*切换为mysqli_*时,您只需要更改包装器的代码。

答案 5 :(得分:0)

如果您有那么多次调用,那么我建议您首先为数据库调用实现(选择或构建)抽象层,然后转换它。

在我的类似练习中,最大的好处(实质性的一点)是mysqli提供了参数化语句,允许你将mysql_real_escape_string等留在后面。但是从一个到另一个的地图几乎不是一对一的。

答案 6 :(得分:0)

建议: 如果您要进行切换,请不要切换到mysqli,而是切换到使用PDO。如果必须切换到mysqli,请确保以PHP5 OO方式使用它。不要同时使用mysqli OO和旧的mysql,或者同时使用旧的mysql和PDO,除非你喜欢意外的连接压缩。