【问题标题】:Error 500 when performing Mysqli Queries执行 Mysqli 查询时出现错误 500
【发布时间】:2026-02-21 05:50:01
【问题描述】:

我一直在使用 PHP 处理一个小型表单获取和插入到 MySQL 数据库系统。我之前在本地 WAMP 服务器上使用过这种类型的代码,现在我尝试在我的主机上真正做到这一点,但我不断收到以下代码的 500 错误内部服务器错误。

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="Main_Stylesheet.css">
    <script   src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <title>Contact</title>
</head>
<body>
    <nav class="navbar navbar-default" id="Body_Nav" style="margin-bottom: none;">
        <div class="container-fluid">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php">Filosofie in Amsterdam</a>
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#myNavbar">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span> 
                </button>
            </div>
            <div class="collapse navbar-collapse" id="myNavbar" >
            <ul class="nav navbar-nav">
                <li><a href="index.php">Home</a></li>
                <li><a href="bestel.php">Bestel</a></li>
                <li><a href="preview.php">Preview</a></li>
                <li class="active"><a href="contact.php">Contact</a></li>
                <li><a href="us.php">Over Ons</a></li>
                <li><a href="donate.php">Doneren</a></li>
            </ul>
            </div>
        </div>
    </nav>
    <div class="container-fluid" id="Contact_Main_Header">
        <div class="row">
            <div class="col-lg-12">
                <h1 class="text-center" id="Contact_Main_Header_H1">Contact</h1>
            </div>
        </div>    
    </div>
    <div class="container">
        <div class="row">
            <div class="col-lg-6">
                <h2 class="text-center">Informatie</h2>
            </div>
            <div class="col-lg-6">
                <h2 class="text-center">Nieuwsbrief</h2>
                <p class="text-justify">Op de hoogte zijn van voortgang of het laatste nieuws? Geef je dan op via de nieuwsbrief hieronder:</p>
                <form method="post" action="formvalid.php">
                    <div class="form-group">
                        <label for="Contact_Form_Email">Email Adres:</label>
                        <input type="email" name="Contact_Form_Email" class="form-control" id="Contact_Form_Email" placeholder="Plaats hier je email adres" required>
                    </div>    
                    <div class="form-group">
                        <label for="Contact_Form_First_Name">Voornaam:</label>
                        <input type="text" name="Contact_Form_First_Name" class="form-control" id="Contact_Form_First_Name" placeholder="Plaats hier je voornaam" required>   
                    </div>
                    <div class="form-group">
                        <label for="Contact_Form_Last_Name">Achternaam:</label>
                        <input type="text" name="Contact_Form_Last_Name" class="form-control" id="Contact_Form_Last_Name" placeholder="Plaats hier je voornaam" required>
                    </div>    
                    <button type="submit" class="btn btn-default">Verzenden</button>
                </form>
            </div>
        </div>
    </div>
</body>
</html>

还有 PHP:

 <?php
 $Server = "localhost";
 $Username = "filoso1q_admin";
 $PW = "Foxtrot15";
 $DB = "filoso1q_nieuwsbrief";
 $connection = mysqli_connect($Server, $Username, $PW, $DB);

 if($connection = false) {
     die("Error: " . mysqli_error_connect());
 }  

 $Email = $_POST("Contact_Form_Email");
 $First_Name = $_POST("Contact_Form_First_Name");
 $Last_Name = $_POST("Contact_Form_Last_Name");

 $sql = "INSERT INTO `Users` ('User_ID', 'Email', 'First_Name', 'Last_Name')  VALUES (NULL, '$Email', '$First_Name',  '$Last_Name');";

 mysqli_query($sql);

 mysqli_close($connection);
 ?>

我很确定其中一些应该可以工作,但由于某种原因,我只能在 PHPmyadmin 本身中运行查询。我的主机使用 Cpanel webadmin 作为网络服务器。

【问题讨论】:

  • 除了骗子,你需要联系mysqli_query($connection, $sql);你现在有你所有的答案了。
  • $Email = $_POST("Contact_Form_Email"); 应该是 $Email = $_POST["Contact_Form_Email"]; 和所有其他 $_POST
  • ^ 等等。正是这些问题让我头晕目眩。
  • 好的,这样做了,但仍然不会执行实际的查询。没有错误,只是空白。
  • if($connection = false) 这是一个分配。你需要if($connection == false)作为对比。我将重新打开问题并让其他人修复所有这些错误。 cmets 和 thttp://*.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks

标签: php mysql mysqli internal-server-error http-status-code-500


【解决方案1】:

我改变了主意,最终决定发布答案。

您使用一个等号分配if($connection = false),而不是与两个if($connection == false) 进行比较。

或者,请参阅mysqli_connect() 上的手册了解更多选项:

您对查询中的列使用了不正确的标识符限定符。它们应该是刻度而不是常规引号。

关于刻度的旁注:您甚至不需要这些,因为您没有使用任何MySQL's reserved words,它们也不包含空格或连字符,或任何其他 MySQL 会抱怨的字符about,因此您可以安全地删除列名。

然后您为 POST 数组使用了不正确类型的括号。你使用了(...) 而不是方形的[...]

您也没有将连接传递给您的查询,它必须是第一个参数。

重写查询并检查错误:

<?php
 $Server = "localhost";
 $Username = "filoso1q_admin";
 $PW = "Foxtrot15";
 $DB = "filoso1q_nieuwsbrief";
 $connection = mysqli_connect($Server, $Username, $PW, $DB);

 if($connection == false) {
     die("Error: " . mysqli_error_connect());
 }  

 $Email = $_POST["Contact_Form_Email"];
 $First_Name = $_POST["Contact_Form_First_Name"];
 $Last_Name = $_POST["Contact_Form_Last_Name"];

 $sql = "INSERT INTO `Users` (`User_ID`, `Email`, `First_Name`, `Last_Name`)  VALUES (NULL, '$Email', '$First_Name',  '$Last_Name');";

 mysqli_query($connection, $sql) or die(mysqli_error($connection));

 mysqli_close($connection);
 ?>

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:显示错误应该只在暂存阶段完成,而不是在生产阶段。

or die(mysqli_error($con))mysqli_query() 用于调试。

还要确保为列选择了正确的类型,并且它们的长度足以容纳数据。

另外,请确保您的 User_ID 列确实接受 NULL 值并且不是 AUTO_INCREMENT。否则,使用 NULL 会失败。

您需要将查询更改为VALUES ('', '$Email', ...


您当前的代码对SQL injection 开放。使用mysqli_* with prepared statements,或PDOprepared statements


500 错误是服务器错误,可以在您的日志中查看。要么检查这些,要么使用上面概述的错误报告以便在屏幕上查看。

【讨论】:

  • 谢谢,错误报告实际上救了我。原来,由于虚拟主机最初设置的方式,用户名很容易被拒绝访问!
  • @BoKamphues 不客气,Bo,很高兴知道问题已解决。但是,一旦您完成了所有这些,您的代码确实包含许多语法错误和缺少参数,这就是我发布此答案的原因。
  • @BoKamphues 该问题也应标记为已解决。以下是meta.stackexchange.com/questions/5234/… 然后返回此处并对勾号/复选标记执行相同操作直到它变为绿色的方法。这会通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,可能想要发布(更多)答案。欢迎来到堆栈。 干杯
  • 是的,确实是非常混乱的代码。我现在就用标记来处理它!
  • @BoKamphues 为博加油。阅读有关使用准备好的语句的信息。我的答案中有链接可以查看。如果以及何时(或已经与您的项目一起使用),您应该使用它们。否则,您的服务器/数据库可能会受到威胁。 保持安全。 ;-)