我有很多php网站的代码,它使用的是不推荐的mysql函数。(Sql注入保护通过real_escape_string)。我突然在页面顶部收到警告,mysql_connect被废弃了,这可能是因为我的主机已经升级了他们的PHP版本,毫无疑问,我必须尽快升级到mysqli。这不是一件容易的事情,因为我们正在谈论成千上万的电话。
然而,尽管该站点正在闪烁这些警告,但大多数调用仍然有效,即您可以登录并显示数据驱动的页面。事实上,我只收到关于三个函数的警告: mysql_connect、mysql_numrows和dates。
如果mysql_connect现在被认为是完全不推荐的,为什么数据库连接仍然有效呢?作为一个快速的修复,而我承担的工作升级整个网站,谁能建议替代mysql_numrows。
谢谢您的见解和建议。
发布于 2015-10-13 00:39:25
虽然这可以在谷歌上搜索,但我想向提问者解释答案,让未来的读者能够很容易地理解这个问题。
不推荐的代码并不一定意味着代码不能工作。它表明它不再受支持。
从理论上讲,您只需将一个@放在函数前面,错误就不会出现。现在,我建议您不要在工作环境中执行此。它的存在是为了压制警告,但它仍然意味着你有安全弱点。所有表示mysql_functionName()的php函数都过时了(或被废弃了)。要解决这个问题,可以使用一些类似于mysqli_functionName()的内容。
使用mysqli可以让你保持最新的状态。现在我看到你在使用过程造型。这是允许的,但建议您使用面向对象编程或PDO。我个人使用OOP-mysqli。
现在应该注意的是,这不是一个无缝的转换;这意味着您不能简单地将i添加到mysql中。像mysqli_connect()这样的函数是不同。另一方面,mysqli_num_rows()应该通过在mysql中添加i来处理相同的问题。有关转换的更多信息,请查看Mysqli文档这里。
更详细的是:
这几乎是一样的: mysqli_num_rows()
--这些是不同的: mysqli_connect(),mysqli_real_escape_string()
--这是删除的 mysql_result() (在mysqli中没有相应的内置)。
我希望这个答案对你来说已经足够详细了。
编辑:
根据提问者提出的问题,不可能将mysql和mysqli合并在一起。它们是对数据库的不同调用。如果调用mysqli_connect(),则将其设置为的变量连接到该db调用。它只会识别mysqli。mysqli中的许多函数,如mysqli_real_escape_string()和mysqli_query(),都要求您传递原始db调用的连接。
总之,不要试图混淆电话。这是行不通的,它有许多安全问题和缺陷。
我认为,当整个基础结构发生变化时,应该完全重写他们的代码,因为不冒任何可能在编辑中留下的旧代码的风险是更安全的。当然,这有一个很大的缺陷,因为它意味着必须非常努力地重建。在这种情况下,这取决于用户,这取决于项目的大小。
https://stackoverflow.com/questions/33092234
复制相似问题