【问题标题】:MYSQL PHP inserting into tableMYSQL PHP插入表
【发布时间】:2012-08-21 14:36:05
【问题描述】:
<?php
$conn= new mysqli("localhost", "my_user", "my_password", "world"); //changed for the sake of this question

$username = $_POST['Username'];
$password = sha1($_POST['Password']);
$email = $_POST['Email'];
$firstname = $_POST['FirstName'];
$lastname = $_POST['LastName'];

$insert = 'INSERT INTO User(FirstName, LastName, Email, Username, Password, Type) VALUES ("'.$firstname.'", "'.$lastname.'", "'.$email.'", "'.$username.'", "'.$password.'", 'User');';

$result = $conn->query($insert);

?>
<form method='post' action='regprocess.php'>
<fieldset class="register">
<h2>Register</h2>
<ul>
    <li><label for="FirstName">First Name: </label> <input type="text" name="FirstName" id="FirstName"></li>
    <li><label for="LastName">Last Name: </label> <input type="text" name="LastName" id="LastName"></li>
    <li><label for="Email">Email: </label><input type="email" name="Email" id="Email"></li>
    <li><label for="Username">Username: </label><input type="text" name="Username" id="Username"></li>
    <li><label for="Password">Password: </label><input type="password" name="Password" id="Password"></li>
    <li><input type="submit" value="Register"></li>
</ul>
</fieldset></form>

表单和最上面的 sql 代码在不同的文件中。

大家好,我正在尝试插入 mysql 表,但它不会插入到我的表中。我试图让它通过注册表插入。而且我不太确定为什么它不起作用。一些见解会很棒。如果您需要我提供表格,我会提供,但我认为这不是它不起作用的部分原因。

【问题讨论】:

  • 你有没有发现User的颜色不对?
  • 查询有错误。尝试转义 User 部分周围的引号,使其变为 \'User\'
  • 您的意思是值部分中的用户位?还是数据库用户?
  • 使用准备好的语句,否则你将容易受到bobby-tables.com的攻击

标签: php mysql html


【解决方案1】:

您使用 mysqli 是件好事,但是您使用不正确,并且使自己暴露在许多非常严重的 SQL 注入错误中,其后果可能很严重。

这是您实际解决示例中存在的众多问题应该做的事情:

$stmt = $conn->prepare('INSERT INTO User(FirstName, LastName, Email, Username, Password, Type) VALUES (?,?,?,?,?,?)');

$stmt->bind_param($firstname, $lastname, $email, $username, $password, 'User');
$stmt->execute();

$result = $stmt->get_result();

占位符的主要优点是不必担心如何正确引用数据,它会自动为您完成。它还很大程度上避免了在语句中使用两种不同的引号。

如果您不使用占位符来将 ANYALL 数据放入您的 SQL 中,您最终可能会遇到严重的麻烦。您必须对此保持警惕。

【讨论】:

    【解决方案2】:

    您的最后一个参数值用单引号括起来。替换为双引号,使其显示为 ..."'.$password.'", "User");';

    【讨论】:

      【解决方案3】:

      我不懂 PHP。不过,我会尝试帮助您使用 MySQL。

      我认为插入查询中的引号有问题。

      尝试从值子句中删除单引号。

      【讨论】:

        【解决方案4】:

        作为建议,始终在 sql 查询文本的开头到结尾使用 ";

        $insert = 'INSERT INTO User(FirstName, LastName, Email, Username, Password, Type) VALUES ("'.$firstname.'", "'.$lastname.'", "'.$email.'", "'.$username.'", "'.$password.'", 'User');';
        

        这样说:

        $insert = "INSERT INTO User(`FirstName`, `LastName`, `Email`, `Username`, `Password`, `Type`) VALUES ('$firstname', '$lastname', '$email', '$username', '$password', 'User');";
        

        在您的查询中,您有“用户”,您需要将“作为\”转义

        并且不要忘记在将内容添加到数据库之前始终对其进行清理

        【讨论】:

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