use*_*766 11 php mysql mysqli mysql-real-escape-string
我需要在我的mysql数据库中输入company_name(由用户通过表单给出).我用的时候
$company = mysqli_real_escape_string($_POST['company_name'])
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
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
Run Code Online (Sandbox Code Playgroud)
但是使用时一切似乎都很好
$company = mysql_real_escape_string($_POST['company_name'])
Run Code Online (Sandbox Code Playgroud)
在这种情况下我该怎么办?
Ans*_*shu 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) );
Run Code Online (Sandbox Code Playgroud)
mysql_real_escape_string()
旨在使数据安全,无需错误地插入数据库.(IE,例如转义斜杠,这样它就不会破坏你的代码).
您应该使用mysql_
或mysqli_
函数来匹配您的连接字符串."mysqli"是面向对象实现的mysql函数集,因此函数在面向对象的样式中被调用."mysql"是程序性的.我建议改用"mysqli",因为我相信在未来的版本中有人讨论过"mysql"功能的贬值.
如果连接字符串是:
mysql_connect()
Run Code Online (Sandbox Code Playgroud)
然后使用:
mysql_real_escape_string($_POST[''])
Run Code Online (Sandbox Code Playgroud)
如果是:
$mysqli = new mysqli();
Run Code Online (Sandbox Code Playgroud)
然后使用:
$mysqli->real_escape_string($_POST[''])
Run Code Online (Sandbox Code Playgroud)
两种变体都很好*(请查看我的更新)。
当您使用 thenmysql_connect
时,您应该坚持mysql_real_escape_string()
并传递连接句柄。
当您使用 amysqli_connect
时,您应该坚持使用mysqli_real_escape_string()
。
更新
正如 Jeffrey 在评论中指出的那样,使用mysql_
函数是不行的。我同意这一点。我只是指出,您需要使用您正在使用的 MySQL 扩展所使用的函数。
我发现问题不是使用哪个 MySQL 扩展,而是使用哪个函数来转义数据。
如果你问我:
归档时间: |
|
查看次数: |
69249 次 |
最近记录: |