【问题标题】:mysqli_real_escape_string() expects exactly 2 parameters, 1 given Fatal Error [duplicate]mysqli_real_escape_string() 需要 2 个参数,1 个给定致命错误 [重复]
【发布时间】:2016-02-25 17:15:19
【问题描述】:

我不断收到这个错误,我在修复它时遇到了问题,我不擅长 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 个在 C:\Apache24\htdocs\Timewise\landing\login.php 第 18 行给出

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

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

【问题讨论】:

  • DO RTM 的 php.net/manual/en/mysqli.real-escape-string.php - php.net/manual/en/mysqli.query.php - 人们不再使用 Google 了吗?!
  • if (isset($_SESSION['user']) != "") { 嗯,也许你也应该阅读isset 的手册。
  • 肯定会给出误报if (isset($_SESSION['user']) != "") - 语法是:if isset AND equals to,而不是if isset equals to
  • 如果您打算使用 md5,请不要。 30 多年来,桥下流了很多水。使用password_hash()
  • @Qirel 所以从 mysli_real_escape 手册上收集的内容我应该这样说,> string mysqli_real_escape_string ( mysqli $link , string $escapestr )

标签: php mysqli


【解决方案1】:

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

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

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

对于 PDO 准备好的语句:

还要检查错误:

密码

我还注意到您正在尝试存储密码 MD5。不建议这样做,因为它不再被认为用作密码存储功能是安全的。

  • 如果您打算使用这个进行直播,不要。

使用以下方法之一:

其他链接:

关于列长度的重要旁注:

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

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


我也说过:

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

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

用途:

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

关于您的 POST 数组。

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

即:&lt;input type="text" name="fullname"&gt;

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

  • 这些是区分大小写的。

还建议在每个header后面加上exit;,否则你的代码可能要继续执行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2014-10-27
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    相关资源
    最近更新 更多