【问题标题】:SQL error in syntax [duplicate]语法中的 SQL 错误 [重复]
【发布时间】:2017-07-20 14:27:27
【问题描述】:

我收到此错误:

错误:INSERT INTO 用户(用户名、密码、邮件、余额、 depost1,depost2,depost3)值(测试, 4f4dfc9a3bec784d456fafabc725977e, test@test.test, '0', '0', '0', '0') 您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 在第 2 行的 '@test.test, '0', '0', '0', '0')' 附近。

所以,我查看了我的语法,但我找不到任何错误的地方。这是我的代码:

<?php
inculde('config.php');
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$sql = "INSERT INTO users (username, password, mail, balance, depost1, depost2, depost3)
VALUES ($user, $result, $mail, '0', '0', '0', '0')";
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

【问题讨论】:

  • $sql = "INSERT INTO users (username, password, mail, balance, depost1, depost2, depost3) VALUES ('$user', '$result', '$mail', '0', '0', '0', '0')";
  • $user、$result、$mail 的报价缺失
  • 这段代码在实际环境中使用是完全不安全的。如果您想保持数据安全和数据库完整,请使用准备好的语句和password_hash()/password_verify()
  • 您还在很可能不需要引号的地方使用了引号,很可能是 int 列类型的整数,而字符串文字要求它们被引用。
  • 你也打错了 => inculde 应该读作include,但这会给你带来一个完全不同的错误,它没有包含在原始帖子中,所以恕我直言,与帖子的关闭无关。

标签: php mysql sql mariadb


【解决方案1】:

您错过了查询中的引号

<?php
    inculde('config.php');
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $sql = "INSERT INTO users (username, password, mail, balance, depost1, depost2, depost3)
    VALUES ('$user','$result', '$mail', '0', '0', '0', '0')";
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
    $conn->close();
?>

【讨论】:

  • 他们在inculde 也打错了,你应该已经发现了,但正如我在 cmets 在他们的问题下指出的那样,这将是另一个不属于原始帖子的问题。我只是 edited your answer 之前的一个错误的报价。
  • @Fred-ii- 同意并感谢
【解决方案2】:

在查询中使用单引号

$sql = "INSERT INTO users (username, password, mail, balance, depost1, depost2, depost3) VALUES ('$user', '$result', '$mail', '0', '0', '0', '0')"

【讨论】:

    【解决方案3】:

    将变量直接放在字符串中时,它们不会自动用引号括起来,即使它们是字符串。

    您必须将查询更改为以下内容:

    $sql = "INSERT INTO users (username, password, mail, balance, depost1, depost2, depost3) VALUES ('$user', '$result', '$mail', '0', '0', '0', '0')";
    

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 2017-05-29
      • 2016-12-30
      • 2020-11-09
      相关资源
      最近更新 更多