警告:mysqli_real_escape_string() 需要 2 个参数,1 个给定...我做错了啥? [复制]

Posted

技术标签:

【中文标题】警告:mysqli_real_escape_string() 需要 2 个参数,1 个给定...我做错了啥? [复制]【英文标题】:Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given... what I do wrong? [duplicate]警告:mysqli_real_escape_string() 需要 2 个参数,1 个给定...我做错了什么? [复制] 【发布时间】:2014-10-27 12:29:40 【问题描述】:

我尝试使用 php 登录,但出现此错误:Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given, 我做错了什么?

注册.php

<!doctype html>
<html lang"fi">
<head>
<link rel="icon" type='image/png' href='images/logo.png'>
<title>
asd
</title>
<link href="css/styles.css" type="text/css" rel="stylesheet">
</head>
<body>
<!--reg alkaa-->
<form action="register.php" method="post">
<p><input type="text" name="username" placeholder="Username">
<p><input type="email" name="email" placeholder="Email">
<p><input type="password" name="pass" placeholder="Password">
<p><input type="password" name="pass1" placeholder="Password">
<p><input type="submit" name="submit" value="Register">
</form>
<?php

if(isset($_POST['submit']))

$username = mysqli_real_escape_string($_POST['username']);
$pass = mysqli_real_escape_string($_POST['pass']);
$pass1 = mysqli_real_escape_string($_POST['pass1']);
$email = mysqli_real_escape_string($_POST['email']);
if($username && $pass && $pass1 && $email)

if($pass==$pass1)

    $connect = mysql_connect("mysql.example.com","username","password");
    mysql_select_db("my_database");
    $query = mysql_query("INSERT INTO users VALUES('$username','$pass','$email');");
    echo "You have been registered.";

else

    echo "Password must match.";


else

echo "All fields are required.";


 ?>
<!--reg end-->
<Center>
<a href="index.php">
<h1>
asd
</h1>
</center>
<div id="main">
<h3>
 <div class="menu"> <a href="index.php">Etusivu</a> &bullet; 
 <a                                       </div>
</h3>
</div>
<div class="jonne"> 
</div>
<script src="javascript/jquery.js"></script>
</body>
</html>

我使用000webhost,这是我第一次在线使用mysql数据库。

【问题讨论】:

【参考方案1】:

您正在混合使用 mysqlimysql 函数。

如果您使用的是 mysql 函数,则改为 mysqli_real_escape_string($your_variable); 使用

$username = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['pass']);
$pass1 = mysql_real_escape_string($_POST['pass1']);
$email = mysql_real_escape_string($_POST['email']);

如果您使用 mysqli_* 函数,那么您必须将与数据库的连接包含在 mysqli_real_escape function 中:

$username = mysqli_real_escape_string($your_connection, $_POST['username']);
$pass = mysqli_real_escape_string($your_connection, $_POST['pass']);
$pass1 = mysqli_real_escape_string($your_connection, $_POST['pass1']);
$email = mysqli_real_escape_string($your_connection, $_POST['email']);

注意:使用 mysqli_* 函数,因为 mysql 已被弃用。有关信息,请阅读mysqli_*

【讨论】:

【参考方案2】:

从documentation 来看,函数mysqli_real_escape_string() 有两个参数。

string mysqli_real_escape_string ( mysqli $link , string $escapestr ).

第一个是mysqli实例(数据库连接对象)的link,第二个是要转义的string。所以你的代码应该是这样的:

$username = mysqli_real_escape_string($yourconnectionobject,$_POST['username']);

【讨论】:

【参考方案3】:

mysqli_real_escape_string function 需要连接到您的数据库。

$username = mysqli_real_escape_string($your_connection, $_POST['username']);

PS:不要混用mysql_函数*mysqli_函数* .请使用mysqli_* functions or PDO,因为 mysql_* 函数已被弃用,将来将被删除。

【讨论】:

【参考方案4】:

你正在混合mysqlmysqli

使用这个mysql_real_escape_string 喜欢

$username = mysql_real_escape_string($_POST['username']);

注意: mysql_* 不推荐使用 mysqli_*PDO

【讨论】:

【参考方案5】:

如果使用程序样式,则必须同时提供连接和字符串:

$name = mysqli_real_escape_string($conn, $name);

只有面向对象的版本可以用一个字符串来完成:

$name = $link->real_escape_string($name);

documentation 应该希望能说明这一点。

【讨论】:

【参考方案6】:

以下工作完美:-

if(isset($_POST['signup']))
$username=mysqli_real_escape_string($connect,$_POST['username']);
$email=mysqli_real_escape_string($connect,$_POST['email']);
$pass1=mysqli_real_escape_string($connect,$_POST['pass1']);
$pass2=mysqli_real_escape_string($connect,$_POST['pass2']);

现在,$connect 是我的变量,其中包含我与数据库的连接。您只省略了连接变量。包括它,它将完美运行。

【讨论】:

【参考方案7】:

$connect 作为mysqli_real_escape_string 中的第一个参数传递给第一次建立连接,然后进行rest.read here http://php.net/manual/en/mysqli.real-escape-string.php

【讨论】:

【参考方案8】:

用这种方式代替你的方式。

    addslashes(trim($_POST['username']));

【讨论】:

为了避免特殊字符在前端使用java脚本验证。 这不是为 MySQL 转义字符串的安全方法。【参考方案9】:

mysql_real_escape_string mysqli_real_escape_string 略有变化。下面的语法

mysql_real_escape_string 语法将是 mysql_real_escape_string($_POST['sample_var'])

mysqli_real_escape_string 语法将是 mysqli_real_escape_string($conn,$_POST['sample_var'])

【讨论】:

【参考方案10】:

将您的查询替换为以下内容:

$query = mysql_query("INSERT INTO users VALUES('$username','$pass','$email')", `$Connect`);

【讨论】:

【参考方案11】:

使用mysql_real_escape_string() 代替mysqli_real_escape_string()

像这样:

$username = mysql_real_escape_string($_POST['username']);

【讨论】:

mysql 已被弃用

以上是关于警告:mysqli_real_escape_string() 需要 2 个参数,1 个给定...我做错了啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

函数中的 PHP Mysqli_real_escape_string 期望参数为 1。空值

“mysqli_real_escape_string”是不是足以避免 SQL 注入或其他 SQL 攻击?

mysqli_real_escape_string 如何无法阻止 SQL 注入? [复制]

mysqli_real_escape_string 如何无法阻止 SQL 注入? [复制]

filter_var 或 mysqli_real_escape_string [重复]

带单引号的 Mysqli_real_escape_string - 安全吗? [复制]