php / mysqlconnect不推荐使用错误:升级到mysqli的最佳方法

时间:2015-10-13 00:22:18

标签: php mysql mysqli

我在php中有一个使用弃用的mysql函数的网站的代码很多。 (Sql注入保护是通过real_escape_string)。我突然得到警告,在页面顶部,mysql_connect被弃用可能是因为我的主机升级了他们的PHP版本,毫无疑问我必须尽快升级到mysqli。这不是一件容易的事,因为我们正在谈论成千上万的电话。

然而,尽管网站正在闪烁这些警告,但大多数呼叫仍然有效,即您可以登录并显示数据驱动的页面。事实上,我收到的警告只有三个函数,mysql_connect,mysql_numrows和dates。

如果mysql_connect现在完全被弃用,为什么数据库连接仍然有效?作为一个快速修复,当我承担升级整个网站的工作时,任何人都可以建议替换mysql_numrows。

感谢您的任何见解或建议。

1 个答案:

答案 0 :(得分:1)

  

虽然这可以用Google搜索,但我想解释一下提问者的答案,并让未来的读者轻松理解这个问题。

不推荐的代码必然意味着代码不起作用。它表示不再支持它。

现在理论上,您可以在函数前放置一个@,但不会出现错误。现在我建议你在工作环境中从不这样做。存在是为了抑制警告,但它仍然意味着你有安全漏洞。所有表达mysql_functionName()的php函数都已过时(或已弃用)。要解决此问题,请改用mysqli_functionName()行。

使用mysqli可以让您保持最新状态。现在我看到你正在使用程序样式。这是允许的,但建议您使用面向对象编程或PDO 。我个人使用OOP-mysqli。

现在应该指出的是,这不是无缝过渡;这意味着您不能简单地在i中添加mysqlmysqli_connect()等函数为different。另一方面,mysqli_num_rows()只需在i中添加mysql即可。查看Mysqli文档here以获取有关转换的更多信息。

更详细一点:

这几乎相同:  mysqli_num_rows()

这些不同: mysqli_connect()mysqli_real_escape_string()

已删除 mysql_result()mysqli中没有内置的等效内容。)

我希望这个答案对你来说足够详细。

修改

根据提问者提出的问题,无法将mysqlmysqli组合在一起。它们是对数据库的不同调用。如果您调用mysqli_connect(),则将其设置为的变量连接到该db调用。它只会识别mysqlimysqli中的许多函数(例如mysqli_real_escape_string()mysqli_query())要求您传递原始数据库调用的连接。

总之,不要试图混合呼叫。它不起作用,它有很多安全问题和缺陷。

我认为,当整个基础架构发生变化时,应该完全重写代码,因为不会冒任何可能在编辑中留下的旧代码的风险更安全。这当然有一个重大缺陷;这意味着必须超级努力重建。在这种情况下,由用户决定,具体取决于项目的大小。