【问题标题】:Warning: mysqli_query() expects parameter 1 to be mysqli boolean given [duplicate]警告:mysqli_query() 期望参数 1 是给定的 mysqli 布尔值 [重复]
【发布时间】:2014-03-22 19:08:37
【问题描述】:

通过我的表单提交内容后,我得到了欢迎部分,然后是 mysql 连接错误,因为 mysql 已关闭,当我打开它时它就消失了,然后是布尔错误。 “警告:mysqli_query() 期望参数 1 为 mysqli,布尔值在 C:\xampp\htdocs\welcome.php 第 25 行给出”

<html>
<body>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?><br>
Your password is <?php echo $_POST["password"]; ?><br>
You have purchased the <?php echo $_POST["sub_type"]; ?>
<?php
$mysqli_host = "localhost";
$mysql_username = "root";
$mysql_password = "123";
$site_db = "test";
$info_name = $_POST["name"];
$info_pass = $_POST["password"];
$info_email = $_POST["password"];
$sub_type = $_POST["sub_type"];

$con=mysqli_connect($mysqli_host,$mysql_username,$mysql_password,$site_db);
// Checks connection to twitch webpanel database and inserts registreation info
if (mysqli_connect_errno());
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"INSERT INTO Users (Username, Password, Email, Subcription)
VALUES ('$info_name', '$info_pass', '$info_email', '$sub_type')");

?>

</body>
</html>

【问题讨论】:

  • 不要使用 mysqli。请改用 PDO。您的代码中存在会导致您的服务器被黑客入侵的错误,请查看 SQL 注入。基本上,您想使用 PDO 的准备好的语句功能将 $_POST 嵌入到查询中。但是花一些时间研究它,你需要把它做好,否则你会遇到严重的麻烦。
  • 它不是一个公共页面
  • 始终调试 mysqli_query($con,"INSERT INTO Users (Username, Password, Email, Subcription) VALUES ('$info_name', '$info_pass', '$info_email', '$sub_type')") or die(mysqli_error($con));
  • 是否公开也没关系,这仍然是错误的做法,您将有错误。
  • @AbhiBeckert 我会说 mysqli 是安全的,因为它支持准备好的语句,所以有什么关系?

标签: php mysql mysqli


【解决方案1】:

很可能,你在 mysqli_connect 中有一个连接错误。错误的凭据或 MySQL 已关闭。

if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    //you need to exit the script, if there is an error
    exit();
}

【讨论】:

  • 我会抛出异常而不是打印错误。
【解决方案2】:
if (mysqli_connect_errno());
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit(); // **this is missing**
}
mysqli_query($con,"INSERT INTO Users (Username, Password, Email, Subcription)
VALUES ('$info_name', '$info_pass', '$info_email', '$sub_type')");

【讨论】:

  • 真的需要那个分号吗?
【解决方案3】:

这是你的错误:

if (mysqli_connect_errno());

结尾不应该有分号。

此外,根据文档,您应该使用它来检查连接错误:

if (mysqli_connect_error())

但正如我在评论中所说,我建议使用 PDO 而不是 mysqli。并确保正确转义插入数据库的值并使用 pbkdf2 或 scrypt 加密密码。

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多