【问题标题】:SQL error inserting into table插入表的 SQL 错误
【发布时间】:2016-01-19 22:31:51
【问题描述】:

我的 php.ini 中不断出现此错误。当我硬设置值但似乎不适用于变量时,它工作正常。

错误:插入到 ContactUS(姓名、电子邮件、订阅)值(测试、my@email.com、1) 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“Anis,my@email.com,1)”附近使用正确的语法

// Create connection
            $conn = new mysqli($servername, $username, $password, $dbname);
            // Check connection
            if ($conn->connect_error) {
                die("Connection failed: " . $conn->connect_error);
            } 

            $sql = "INSERT INTO ContactUS (name, email, subscribed) VALUES ($name, $email, $subscribed)";

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

【问题讨论】:

  • VALUES ('$name', '$email', '$subscribed'),但这会导致 sql 注入。阅读此answer

标签: php mysql


【解决方案1】:

值应该被引用:

$sql = "INSERT INTO ContactUS (name, email, subscribed) VALUES ('$name', '$email', '$subscribed')";

也许最好使用准备好的语句,因为这是自动为您完成的并且您不会受到SQL injections 的攻击。

【讨论】:

  • 你应该把你的第二句话改成It is better to use prepared statements as this is done automatically for you, and you won't be open to SQL injections.
  • 啊,谢谢,因为它们是不需要引号的变量。
【解决方案2】:

在变量周围使用引号,因为 PHP 将替换它的值,留下一个无效的查询:

 $sql = "INSERT INTO ContactUS (name, email, subscribed) VALUES ('$name', '$email', '$subscribed')";

但请使用准备好的语句,否则你将成为 SQL 注入的受害者

【讨论】:

  • 您的回答应该说明您所做的更改,以便 OP 知道未来的问题。
猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多