【问题标题】:beginner php/mysql => add data to DB from HTML form [duplicate]初学者php / mysql =>从HTML表单向数据库添加数据[重复]
【发布时间】:2017-03-28 16:34:38
【问题描述】:

我正在尝试使用用户输入到 html 表单中的数据将数据添加到我的数据库中。这是我的代码:

<?php

error_reporting(E_ALL);

$conn = new mysqli(/* private infos hidden on stackoverflow */);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if(isset($_POST['submitButton'])) {

    $getName = $_POST['name'];

    $query = "INSERT INTO data ('name') VALUES ('$getName')";

    if ($conn->query($query) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $query . "<br>" . $conn->error;
    }

    $conn->close();
}
?>

<html>

<form method="post">
    Name: <input type="text" name="name"><br>
    <input type="submit" name="submitButton">
</form>

</html>

我得到这个错误:

错误:INSERT INTO data ('name') VALUES ('', '', '', '', '')

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 1 行的“名称”) VALU 附近使用的正确语法

** 我已经尝试过的:**

  • "INSERT INTO data ('name') VALUES ('$getName')";

  • "INSERT INTO data ('name') VALUES ($getName)";

  • "INSERT INTO data (name) VALUES ('$getName')";

  • "INSERT INTO 'data' ('name') VALUES ('$getName')";

  • "INSERT INTO data (name) VALUES ($getName)";

  • "INSERT INTO data (name) VALUES '$getName'";

感谢大家的帮助

【问题讨论】:

  • 由于您刚刚学习,您可能希望现在从准备好的语句开始(在您学习错误的查询运行方式并需要重新学习之前)。您尝试运行查询的方式非常不安全,只是要求进行 SQL 注入攻击。请参阅:php.net/manual/en/mysqli.quickstart.prepared-statements.php 另请参阅:bobby-tables.com
  • 为什么你的错误信息显示VALUES ('', '', '', '', '')?您在此输入字段中究竟输入了什么?如果你只是输入一个名字,那么这个错误是没有意义的!
  • 名称是保留字。使用反引号
  • 它只是一个关键字,不是保留的,所以不需要打勾。但也不痛!
  • “名称是保留字。使用反引号” - 不,name 不是保留字,它是“关键字” - dev.mysql.com/doc/refman/5.7/en/keywords.html - 两种不同的动物在这里。

标签: php mysql database phpmyadmin


【解决方案1】:

应该可以正常工作:

$query = "INSERT INTO `data` (`name`) VALUES ('$getName')";

编辑:忘记了 data 关键字周围的反引号。

【讨论】:

  • “忘记了数据关键字周围的反引号。” - 它们只是一个“关键字”而不是保留字 - dev.mysql.com/doc/refman/5.7/en/keywords.html - 所以没有必要打勾那。它们有常规引号,而不是刻度或根本没有。
【解决方案2】:

或者

INSERT INTO data (name)

或者

INSERT INTO data (`name`)

upd.:“名称”和“数据”这两个词在 SQL 中是保留的,将它们用作表和字段名称是个坏主意。

【讨论】:

  • 这个答案想说的是,列名(和表名)需要用反引号而不是单引号括起来。
  • ““名称”和“数据”这两个词在 SQL 中是保留的” - 不,它们不是保留字,它们是“关键字” - dev.mysql.com/doc/refman/5.7/en/keywords.html -这里有两种不同的动物。
  • 在上下文中保留词 == keywords (:
【解决方案3】:

INSERT INTO data ('name') VALUES ('', '', '', '', '') -> 在那个特定的表中有多少列? 5 ?如果是这样,您需要查看 doc -> INSERT INTO table_name (column1, column2, column3,...) 值(值1,值2,值3,...)

【讨论】:

    猜你喜欢
    • 2013-04-14
    • 2017-08-20
    • 2017-11-30
    • 2012-03-14
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多