【发布时间】: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>";
- 我尝试打印第二个参数 $Insert_Patient_Data ,它会打印查询。输出没有错。
- 我尝试打印第一个参数 $Connection 并给出错误:可恢复的致命错误:无法将 MySQLi 类的对象转换为字符串
- 我尝试打印 $Patient_Query,但它什么也没打印,甚至第二个参数(即 $Insert_Patient_Data)在这一行也变为空。
- 此时我尝试执行 $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 statements 和 bind_param。 这将解决可能发生的任何令人讨厌的引用问题,您再也不用担心杂散的撇号了。
-
我使用了@aynber 的var_dump,我看到了错误...我只是将外键的默认值更改为另一个表,它解决了整个错误。太感谢了!你的帮助很大。