我需要在我的mysql数据库中输入company_name(由用户通过表单提供)。 当我使用
$company = mysqli_real_escape_string($_POST['company_name'])
我收到错误
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in /opt/lampp/htdocs/Abacus-Version-2/admin/Company/insert_company.php on line 58
但是在使用
时一切似乎都很好$company = mysql_real_escape_string($_POST['company_name'])
在这种情况下我该怎么办?
答案 0 :(得分:12)
使用的取决于您使用的是MySQLi
扩展程序还是MySQL
扩展程序
// procedural mysqli
$db = new mysqli;
$sql = sprintf("INSERT INTO table (id,name,email,comment) VALUES (NULL,'%s','%s','%s')",
mysqli_real_escape_string($db,$name),
mysqli_real_escape_string($db,$email),
mysqli_real_escape_string($db,$comment) );
// mysql
$conn = mysql_connect();
$sql = sprintf("INSERT INTO table (id,name,email,comment) VALUES (NULL,'%s','%s','%s')",
mysql_real_escape_string($name,$conn),
mysql_real_escape_string($email,$conn),
mysql_real_escape_string($comment,$conn) );
答案 1 :(得分:8)
mysql_real_escape_string()
旨在使数据安全无误地插入数据库。 (IE,例如转义斜杠,这样就不会破坏你的代码)。
您应该使用mysql_
或mysqli_
函数来匹配您的连接字符串。 “mysqli”是面向对象实现的mysql函数集,因此函数在面向对象的样式中被调用。 “mysql”是程序性的。我建议换到“mysqli”,因为我相信在未来的版本中有人讨论过“mysql”功能的贬值。
如果连接字符串是:
mysql_connect()
然后使用:
mysql_real_escape_string($_POST[''])
如果是:
$mysqli = new mysqli();
然后使用:
$mysqli->real_escape_string($_POST[''])
答案 2 :(得分:4)
这两个功能都与表格数据无关
它们必须用于格式化插入SQL查询 的字符串文字。
此函数属于SQL查询,而不是任何形式。甚至是非常有限的查询部分 - 字符串文字。
因此,每次你要插入查询字符串文字时(坦率地说,用引号括起来的部分数据),这个函数应该无条件地使用。
对于任何其他情况,不应该使用它。
至于你得到的错误 - 这是非常明显的:这个函数需要2个参数,而不是一个。只需传递此功能的手册页中所述的适当参数,您就可以了
答案 3 :(得分:1)
两种变体都很好*(请查看我的更新)。
当您使用mysql_connect
时,您应该坚持使用mysql_real_escape_string()
并传递连接句柄。
当您使用mysqli_connect
时,您应该坚持mysqli_real_escape_string()
。
<强>更新强>
正如Jeffrey在评论中指出的那样,使用mysql_
函数 NOT 就好了。我同意这一点。我只是指出,你需要使用你正在使用的MySQL扩展使用的函数。
它来找我,这不是问题,使用哪个MySQL扩展,但是用于转义数据的功能。
如果你问我:
mysqli
或PDO
,因为不推荐使用mysql
并弃用。答案 4 :(得分:0)
由于所有MySQL
扩展名都是deprecated,因此您最好使用MySQLi
方法,这是未来的证明。
答案 5 :(得分:0)
如果你使用程序风格应该是这个:
$city = mysqli_real_escape_string($link, $city);
其中link是连接
使用面向对象样式时或者这个:
$city = $mysqli->real_escape_string($city);
查看php手册: http://php.net/manual/en/mysqli.real-escape-string.php