【问题标题】:Cannot Insert Into PHP to MYSQL database无法插入 PHP 到 MYSQL 数据库
【发布时间】:2015-10-06 12:33:58
【问题描述】:

我可以从数据库读取,但是当我向数据库插入数据时,它说“注册成功!”,然后我检查我的数据库,它没有插入任何数据。

注册.php

    <!DOCTYPE HTML>
    <html>
<head>
<title>Register page</title>
<br>
<font size="5" color="black"><b>&nbsp;Register Page<br><br></b></font>
</head>

<body background=" images/background.jpg">
<form action="index.php">
    <input type="submit" value="Home">
</form>
<br>
<form action="Register.php" method="POST">
 <fieldset>
  <legend>Enter your information</legend>
  <table>
      <tr>
          <td>Username:</td>
          <td><input type="text" name="username" required="required"/><br></td>
      </tr>
      <tr>
          <td>Password:</td>
          <td><input type="text" name="password" required="required"/><br></td>
      </tr>
      <tr>
          <td>Email:</td>
          <td><input type="text" name="email" required="required"/><br></td>
      </tr>
      <tr>
          <td>First Name:</td>
          <td><input type="text" name="firstname" required="required"/><br></td>
      </tr>
      <tr>
          <td>Last Name:</td>
          <td><input type="text" name="lastname" required="required"/><br></td>
      </tr>
      <tr>
          <td>Date of Birth:</td>
          <td><input type="date" name="dateofbirth" required="required" ><br></td>
      </tr>
      <tr>
          <td><input type="submit" value="Register"/></td>
    </tr>

  </table>
 </fieldset>
</form>


</body>
</html>
<?php
if($_SERVER["REQUEST_METHOD"] == "POST")
    {
        $username   = mysql_real_escape_string($_POST['username']);
        $password   = mysql_real_escape_string($_POST['password']);
        $firstname  = $_POST['firstname'];
        $lastname   = $_POST['lastname'];
        $email      = mysql_real_escape_string($_POST['email']);
        $dateofbirth= $_POST['dateofbirth'];
        echo "user is :".$username;
        $bool = true;
        mysql_connect("localhost", "root", "") or die(mysql_error());
        mysql_select_db("userdata") or die(mysql_error("Cannot Connect to Database"));
        $query = mysql_query("SELECT * FROM users");
        while($row = mysql_fetch_array($query))
                {
                    $table_users = $row['username'];
                    if($username == $table_users)
                        {
                            $bool = false;
                            Print '<script>alert("username is used!");</script>';
                            Print '<script>window.location.assign("Register.php");</script>';

                        }
                }
        if($bool)
         {
        mysql_query("INSERT INTO users ('username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')");
        Print '<script>alert("Successfully Registered!");</script>';
        Print '<script>window.location.assign("Register.php");</script>';
         }


}
 ?>

已解决: 我用 PDO 代替了 mysql_ 和 mysqli_ 。

【问题讨论】:

  • 在插入查询中'username' 之前缺少单引号(实际上您不需要封装列名,并且无论如何都应该使用反引号)。您没有检查插入是否成功。您正在使用已弃用的 mysql_ 函数而不是 mysqli_
  • 为什么你还在使用 mysql_connect ,它已经被弃用了,请使用 PDO 代替它。
  • 我不知道如何使用PDO,如果更好的话希望你能帮助我
  • 你应该测试看看mysql_query实际上返回了什么,而不是仅仅假设它成功了。这不是插入失败的原因,但有助于排除故障,让您有机会捕获错误并报告问题,而不仅仅是默默地丢弃数据。
  • PDO 解决了我的问题,谢谢大家

标签: php mysql database insert-into


【解决方案1】:

更正 SQL:

mysql_query("INSERT INTO users (username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')");

mysql_query("INSERT INTO users (username,password,email,firstname,lastname,dateofbirth) VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')");

说明:

在 MySQL 中,字段名称不使用单引号括起来。相当 它们可以用反引号 (`) 括起来以避免与 保留关键字。

注意:不要使用mysql_* 函数。它们已被弃用,您可以使用 mysqli_*PDO

【讨论】:

    【解决方案2】:

    您在 mysql 查询中缺少用户名之前的开头 '。不确定是不是问题,但会引起问题。

    【讨论】:

      【解决方案3】:

      这与 INSERT 问题本身无关,而是与检查用户名是否存在于数据库中的例程有关:

      ...
      $bool = true;
      $query = mysql_query("SELECT * FROM users");
      while($row = mysql_fetch_array($query))
      {
          $table_users = $row['username'];
          if($username == $table_users)
          {
              $bool = false;
              Print '<script>alert("username is used!");</script>';
         }
      }
      if($bool)
      {
      ...
      

      您可以使用 SQL 为您完成这项工作,而不是在您的代码中遍历用户表中的所有记录:

      ...
      $username_esc = mysql_real_escape_string($username);
      $query = mysql_query("SELECT * FROM users where username = '$username_esc'");
      ...
      

      然后只检查查询是否返回任何行。

      希望这会有所帮助。

      【讨论】:

      • 我检查了我可以从数据库中读取行,但我不能插入,它说“成功注册”,但是当我检查数据库时,没有任何变化
      【解决方案4】:

      我测试了您的代码,发现连接不正确,其次您在字段名称中使用了不正确语法的引号,因此查询未执行。我的意见是使用 mysqli_connect 而不是 mysql_connect 它是旧的并且已弃用。我已经更新了你的代码,希望对你有帮助:

          <?php 
      //your values from post I just assign test for all
      $username   = 'test';//mysql_real_escape_string($_POST['username']);
      $password   = 'test';//mysql_real_escape_string($_POST['password']);
      $firstname  = 'test';//mysql_real_escape_string($_POST['firstname']);
      $lastname   = 'test';//mysql_real_escape_string($_POST['lastname']);
      $email      = 'test';//mysql_real_escape_string($_POST['email']);
      $dateofbirth= 'test';//mysql_real_escape_string($_POST['dateofbirth']);
      $bool = true;
      
      //database connection
      $servername = "localhost";
      $username1 = "root";
      $password1 = "";
      $db  = 'test_001';
      
      // Create connection
      $conn = new mysqli($servername, $username1, $password1, $db);
      
      $result = $conn->query("SELECT * FROM users");
      
      while($row = $result->fetch_assoc())
      {
          $table_users = $row['username'];
          if($username == $table_users)
          {
              $bool = false;
              Print '<script>alert("username is used!");</script>';
              //Print '<script>window.location.assign("Register.php");</script>';
      
          }
      }
      
      if($bool)
      {
          //mysql_query("INSERT INTO users ('username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')");
      
          $query = "INSERT INTO users (username,password,email,firstname,lastname,dateofbirth) VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')";
          $x = $conn->query($query);
          if ($x)
              Print '<script>alert("Successfully Registered!");</script>';
          Print '<script>window.location.assign("Register.php");</script>';
      }
      

      【讨论】:

      • 谢谢,但是当我使用此代码时,它不会打印“成功注册”和同样的问题
      • 首先检查mysql是连接状态,使用connection_status()是否连接,如果connection_status()返回1,表示连接正常,然后回显你的查询并尝试在 sql 中运行它或在此处发表评论(在 echo 复制并粘贴为评论之后)
      【解决方案5】:

      您需要删除字段名称周围的引号,因此您的任务应该是

      插入用户(用户名、密码、电子邮件、名字、姓氏、出生日期) 值('$username','$password','$email','$firstname','$lastname','$dateofbirth')

      我还建议使用数据库包装器来自动转义变量。

      http://www.chris-shaw.com/b/How-to-connect-to-a-database-using-a-class

      【讨论】:

        【解决方案6】:

        PDO 解决了这个问题 MYSQL 出了很多问题,但是当我使用 PDO 时它解决了问题

        【讨论】:

          【解决方案7】:

          更新你的底部代码

          if($bool)
              {
                  mysql_query("INSERT INTO users ('username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')");
                  Print '<script>alert("Successfully Registered!");</script>';
                  Print '<script>window.location.assign("Register.php");</script>';
              }
          

          【讨论】:

          • @WaleedWalaaAldeanAbuZaid 编辑您的问题并编写您现在正在运行的代码
          • @WaleedWalaaAldeanAbuZaid 它现在应该可以工作了。通过引用表名(如users)再次尝试
          • 我这样做了,仍然有问题..当我有用户名“admin”的行时,当我插入用户名 admin 时,它说“使用了用户名”,这意味着问题不在查询中。
          【解决方案8】:
          $sql = "INSERT INTO users (name,username,password,status,picture) VALUES ('$name','$uname','$pass',0,'$picture')";
          

          【讨论】:

          • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
          猜你喜欢
          • 2016-09-24
          • 1970-01-01
          • 1970-01-01
          • 2018-10-14
          • 2014-03-27
          • 1970-01-01
          • 2015-01-02
          • 1970-01-01
          • 2018-05-29
          相关资源
          最近更新 更多