mysqli_real_escape_string() 正好需要 2 个参数,其中 1 个给定致命错误


mysqli_real_escape_string() expects exactly 2 parameters, 1 given Fatal Error

我不断收到此错误,并且在修复时遇到问题,在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 个在第 13 行的 C:''Apache24''htdocs''Timewise''landing''login.php 中给出

警告: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

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

你能帮我解决这个问题吗,我需要知道如何实际解决这个问题。

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

  • http://php.net/manual/en/mysqli.query.php
  • http://php.net/manual/en/mysqli.real-escape-string.php

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

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

  • 从手册开始:http://php.net/manual/en/book.pdo.php 一切都在那里。

对于PDO准备的声明:

  • http://php.net/pdo.prepared-statements

还要检查错误:

  • http://php.net/manual/en/pdo.error-handling.php (PDO)
  • http://php.net/manual/en/function.error-reporting.php (菲律宾比索)

密码

我还注意到您正在倾向于存储密码MD5。不建议这样做,因为它不再被视为安全用作密码存储功能。

  • 如果您打算使用它进行直播,请不要这样做。

使用以下方法之一:

  • CRYPT_BLOWFISH
  • crypt()
  • bcrypt()
  • scrypt()
  • 在开墙上
  • PBKDF2
  • PBKDF2 on PHP.net
  • PHP 5.5 的password_hash()函数。
  • 兼容包(如果 PHP <5.5)https://github.com/ircmaxell/password_compat/

其他链接:

  • PBKDF2 for PHP

关于列长的重要旁注:

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

您需要更改列的长度并使用新的哈希重新开始才能使其生效。否则,MySQL 将以静默方式失败。


正如我也说过的:

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

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

用:

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

关于您的开机自检阵列。

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

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

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

  • 这些区分大小写。

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

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