登录网站遇mysqli_real_escape_string两类参数报错,求技术修复
搞定PHP警告,恢复网站登录
嘿,我来帮你解决这两个烦人的PHP警告问题,让你能正常登录网站。先给你拆解清楚问题根源,再给你一步步的修复指导,不用懂编程也能跟着做。
错误根源拆解
你遇到的两个警告都和mysqli_real_escape_string()这个函数有关:
mysqli_real_escape_string() expects parameter 1 to be mysqli, null given:意思是你调用这个函数时,第一个参数(数据库连接对象)是空的,根本没传有效的连接。mysqli_real_escape_string() expects exactly 2 parameters, 1 given:这个函数必须传2个参数(连接对象+要处理的字符串),但你只传了1个。
再看你给的client_config.php代码,发现你大部分用的是旧的mysql_*系列函数(比如mysql_connect、mysql_query),但在第147行却用了新的mysqli_*函数——这俩扩展完全不兼容,这就是核心问题!
一步步修复(超简单)
第一步:找到第147行的错误代码
打开client_config.php,定位到第147行,你会看到类似这样的代码:
// 要么是只传了一个字符串 $xxx = mysqli_real_escape_string("要处理的内容"); // 要么是传了个空的连接 $xxx = mysqli_real_escape_string(null, "要处理的内容");
第二步:替换成匹配你现有代码的函数
因为你的代码全是用mysql_*系列,直接把mysqli_real_escape_string换成mysql_real_escape_string就行——这个旧函数只需要传要处理的字符串,它会自动用你之前创建的数据库连接:
// 把原来的代码改成这样(把"要处理的内容"换成你原来的变量名) $xxx = mysql_real_escape_string("要处理的内容");
第三步:验证修复
保存修改后的文件,然后去登录网站,这两个警告应该就消失了,你也能正常登录了。
额外安全提醒(可选)
mysql_*系列函数已经被PHP官方废弃很多年了,安全性和兼容性都很差。如果之后你有精力,建议把整个代码里的mysql_*函数都换成mysqli_*的面向对象写法,比如:
- 把数据库连接代码改成:
// 替换原来的mysql_connect和mysql_select_db $connect = new mysqli($GLOBALdatabase_cf['host'], $GLOBALdatabase_cf['username'], $GLOBALdatabase_cf['password'], $GLOBALdatabase_cf['database']); if ($connect->connect_error) { die("连接失败:" . $connect->connect_error); }
- 把
mysql_query($sql)改成$connect->query($sql),mysql_fetch_row($result)改成$result->fetch_row(),以此类推。
不过这个需要改多处代码,先做前面的两步就能快速解决登录问题啦。
内容的提问来源于stack exchange,提问作者Anthony Muchangi
相关产品推荐
相关产品推荐

