mysqli_real_escape_string()只需要2个参数,1给出致命错误

时间:2016-02-25 17:15:20

标签: php mysql

我一直收到这个错误,我在解决这个问题时遇到了问题,因为我还在学习,所以PHP不好用。我正在编写注册表并使用PHP 5.6。我已经查看过旧问题的其他答案,但我没有成功。

这是我的代码:

<?php
session_start();
if (isset($_SESSION['user']) != "") {
    header("Location: index.html");
}
include_once 'dbconnect.php';

if (isset($_POST['signup'])) {
    $fname  = mysqli_real_escape_string($_POST['fullname']);
    $tphone = mysqli_real_escape_string($_POST['telephone']);
    $uemail = mysqli_real_escape_string($_POST['email']);
    $urole  = mysqli_real_escape_string($_POST['role']);
    $upass  = md5(mysqli_real_escape_string($_POST['upass']));

    $uname  = trim($uname);
    $tphone = trim($tphone);
    $email  = trim($email);
    $urole  = trim($role);
    $upass  = trim($upass);

    // email exist or not
    $query  = "SELECT email FROM users WHERE email='$uemail'";
    $result = mysqli_query($query);

    $count = mysqli_num_rows($result); // if email not found then register

    if ($count == 0) {

        if (mysqli_query("INSERT INTO users(firstname,telephone,email,role,pass) VALUES('$fname','$tphone','$uemail','$urole',$upass')")) {
?>
           <script>alert('successfully registered ');</script>
            <?php
        } else {
?>
           <script>alert('error while registering you...');</script>
            <?php
        }
    } else {
?>
           <script>alert('Sorry Email ID already taken ...');</script>
            <?php
    }

}
?> 

我一直在犯的错误是:

  

警告:mysqli_real_escape_string()需要2个参数,1在第12行的C:\ Apache24 \ htdocs \ Timewise \ landing \ login.php中给出

     

警告:mysqli_real_escape_string()正好需要2个参数,1在C:\ Apache24 \ htdocs \ Timewise \ landing \ login.php第13行中给出

     

警告:mysqli_query()需要至少2个参数,1在第18行的C:\ Apache24 \ htdocs \ Timewise \ landing \ login.php中给出

     

警告:mysqli_fetch_array()要求参数1为mysqli_result,在第19行的C:\ Apache24 \ htdocs \ Timewise \ landing \ login.php中给出null

     

警告:mysqli_num_rows()期望参数1为mysqli_result,在第21行的C:\ Apache24 \ htdocs \ Timewise \ landing \ login.php中给出null

请你帮我解决这个问题,我需要知道如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

技术上回答这个问题,这两个函数都需要传递数据库连接,并作为第一个参数,按照手册:

然后在评论中说明您正在使用PDO进行连接。

那些不同的MySQL API不会混用。您需要使用相同的连接到查询。因此,如果要继续使用PDO连接,则需要使用PDO函数进行查询,而不是mysqli_*

对于PDO准备好的陈述:

还检查错误:

<强>密码

我还注意到你正在准备存储密码MD5。建议不要这样做,因为它不再被认为可以安全地用作密码存储功能。

  • 如果您打算使用此功能, 请不要。

使用以下其中一项:

其他链接:

关于列长的重要说明:

如果您决定使用password_hash()或隐藏,请务必注意,如果您当前的密码列的长度低于60,则需要将其更改为(或更高)。手册建议长度为255。

您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。

我还说过:

if (isset($_SESSION['user']) != "")会给你误报。

语法为:if isset AND equals to,而不是if isset equals to,这是目前被解释为的。

使用:

if (isset($_SESSION['user']) && $_SESSION['user'] != "")

关于你的POST阵列。

确保您使用的HTML表单确实使用POST方法,并且所有元素都包含其各自的名称属性。

即:<input type="text" name="fullname">等。

请注意,name="fullname"name="FullName"是两种不同的动物。

  • 这些是区分大小写的。

还建议在每个标头后添加exit;,否则您的代码可能希望继续执行。

header("Location: index.html");
exit;