【问题标题】:First parameter in Mysqli Query is nullMysqli 查询中的第一个参数为空
【发布时间】:2018-03-02 23:31:41
【问题描述】:

我有这个问题,当我从 mysqli 查询打印第二个参数时,它会打印出要执行的查询,但是当我打印第一个参数时,它什么也不打印,当我执行查询时它会产生错误并且无法插入数据存入数据库。这是我的代码:

            $Insert_Patient_Data = "INSERT INTO patient_account(P_Password,P_Fname,P_Lname,P_Mname,P_Age,P_Gender,P_Email) 
            VALUES('$Encrypted_Password', '$Inputted_First_Name', '$Inputted_Last_Name', '$Inputted_Middle_Name', '$Inputted_Age', '$Inputted_Gender', '$Inputted_Email')";

            $Patient_Query = mysqli_query($Connection, $Insert_Patient_Data);

            if(!$Patient_Query)
                echo "<script type = 'text/javascript'> alert('Error: Database Connection error. Please try again Later.') </script>";
            else
                echo "<script type = 'text/javascript'> alert('Succesfully Registered.') </script>";
  1. 我尝试打印第二个参数 $Insert_Patient_Data ,它会打印查询。输出没有错。
  2. 我尝试打印第一个参数 $Connection 并给出错误:可恢复的致命错误:无法将 MySQLi 类的对象转换为字符串
  3. 我尝试打印 $Patient_Query,但它什么也没打印,甚至第二个参数(即 $Insert_Patient_Data)在这一行也变为空。
  4. 此时我尝试执行 $Patient_Query(不打印它)并进入 if(!$Patient_Query) 决定。

问题:为什么会变成空?会发生什么?解决方案是什么?此页面上有一些查询访问同一个表,但它们没有问题。

附:我检查了数据库中的表名和列名,它们都很好。我还包括了 System_Connector.php(其中声明了与数据库的连接和变量 $connection)。

【问题讨论】:

  • 你不能回显 mysqli 连接,因为它是一个对象。你可以使用var_dump()print_r(),但我真的不推荐它。您只需要确保它不是 null 或 false。我真的建议检查 mysqli errors 以找出为什么查询失败。
  • 如果!$Patient_Query 为真,则执行查询时出错。使用mysqli_error($Connection) 查看该错误是什么。由于您的代码对 SQL 注入非常开放,因此您可能会尝试执行各种损坏的语法或无效的 SQL。纠正 SQL 注入漏洞很可能会使您当前的错误变得毫无意义。
  • 您对 SQL 注入持开放态度。由于您使用的是 mysqli,因此请利用 prepared statementsbind_param这将解决可能发生的任何令人讨厌的引用问题,您再也不用担心杂散的撇号了。
  • 我使用了@aynber 的var_dump,我看到了错误...我只是将外键的默认值更改为另一个表,它解决了整个错误。太感谢了!你的帮助很大。

标签: php mysqli xampp


【解决方案1】:

var_dump($Connection) 会显示你有一个 mysqli 对象,你不能回显对象!

无论如何,如果失败,请致电mysqli_error($Connection) http://php.net/manual/en/mysqli.error.php

$Patient_Query = mysqli_query($Connection, $Insert_Patient_Data) or die(mysqli_error($Connection));

甚至:

    if(!$Patient_Query = mysqli_query($Connection, $Insert_Patient_Data);)
        //fail
    else
       // pass

【讨论】:

  • 当我尝试 $Patient_Query = mysqli_query($Connection, $Insert_Patient_Data) 或 die(mysqli_error());它产生这个:警告:mysqli_error() 只需要 1 个参数,给定 0。 null 是 $Connection ,但我不知道它变成 null 的原因。
  • 哎呀,已编辑 - 您需要将连接传递给 mysqli_error!
猜你喜欢
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
相关资源
最近更新 更多