我在php中有一个使用弃用的mysql函数的网站的代码很多。 (Sql注入保护是通过real_escape_string)。我突然得到警告,在页面顶部,mysql_connect被弃用可能是因为我的主机升级了他们的PHP版本,毫无疑问我必须尽快升级到mysqli。这不是一件容易的事,因为我们正在谈论成千上万的电话。
然而,尽管网站正在闪烁这些警告,但大多数呼叫仍然有效,即您可以登录并显示数据驱动的页面。事实上,我收到的警告只有三个函数,mysql_connect,mysql_numrows和dates。
如果mysql_connect现在完全被弃用,为什么数据库连接仍然有效?作为一个快速修复,当我承担升级整个网站的工作时,任何人都可以建议替换mysql_numrows。
感谢您的任何见解或建议。
答案 0 :(得分:1)
虽然这可以用Google搜索,但我想解释一下提问者的答案,并让未来的读者轻松理解这个问题。
不推荐的代码必然意味着代码不起作用。它表示不再支持它。
现在理论上,您可以在函数前放置一个@
,但不会出现错误。现在我建议你在工作环境中从不这样做。存在是为了抑制警告,但它仍然意味着你有安全漏洞。所有表达mysql_functionName()
的php函数都已过时(或已弃用)。要解决此问题,请改用mysqli_functionName()
行。
使用mysqli可以让您保持最新状态。现在我看到你正在使用程序样式。这是允许的,但建议您使用面向对象编程或PDO 。我个人使用OOP-mysqli。
现在应该指出的是,这不是无缝过渡;这意味着您不能简单地在i
中添加mysql
。 mysqli_connect()
等函数为different。另一方面,mysqli_num_rows()
只需在i
中添加mysql
即可。查看Mysqli文档here以获取有关转换的更多信息。
更详细一点:
这几乎相同:
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()
)要求您传递原始数据库调用的连接。
总之,不要试图混合呼叫。它不起作用,它有很多安全问题和缺陷。
我认为,当整个基础架构发生变化时,应该完全重写代码,因为不会冒任何可能在编辑中留下的旧代码的风险更安全。这当然有一个重大缺陷;这意味着必须超级努力重建。在这种情况下,由用户决定,具体取决于项目的大小。