【问题标题】:MYSQL database storing error [duplicate]MYSQL数据库存储错误[重复]
【发布时间】:2015-12-17 10:38:16
【问题描述】:

错误:插入杂货店('GrocerID'、'GrocerName'、'Address'、 'LogoImage') 值 ('GID0072', 'BigBazaar','India, Andhra Pradesh, 522124','WIN_20150817_121614.JPG') 你的 SQL 有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在 ''GrocerID'、'GrocerName'、'Address' 附近使用正确的语法, 'LogoImage') VALUES ('GID0072', 'BigBazaar' 在第 1 行

    <?php
$servername = "localhost";
$username = "root";
$password = "secret";
$dbname = "task";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

$GrocerID=$_POST['GrocerID']; 
$GrocerName=$_POST['GrocerName'] ;
$Address=$_POST['Address'];
$LogoImage=$_POST['LogoImage'] ;




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

$sql = "INSERT INTO grocery ('GrocerID', 'GrocerName', 'Address', 'LogoImage')
VALUES ('$GrocerID', '$GrocerName','$Address','$LogoImage')";

if ($conn->query($sql) === TRUE) {
    header('Location:task.html');
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

Data Base image

谁能告诉我我在这里犯了什么错误?

我用过 数据库名称:任务, 表名:杂货店 但我无法理解我在哪里做错了。

谢谢

【问题讨论】:

  • 从column name 中删除quotes 改为使用backtick !!
  • 谢谢你,我明白了;)
  • 反引号是这个符号“`”它是“1和!”左边的键键

标签: php mysql database forms


【解决方案1】:

不要在''中写coloumn使用backticks ``

INSERT INTO grocery 
(GrocerID, GrocerName, Address, LogoImage) 
VALUES ('GID0072', 'BigBazaar','India, Andhra Pradesh, 522124','WIN_20150817_121614.JPG')

【讨论】:

    【解决方案2】:

    要么删除'

    INSERT INTO grocery 
    (GrocerID, GrocerName, Address, LogoImage) 
    VALUES ('GID0072', 'BigBazaar','India, Andhra Pradesh, 522124','WIN_20150817_121614.JPG')
    

    或

    将' 替换为`(反引号)

    [注意:您可以在键盘的Esc key下方找到backtick]

    INSERT INTO grocery 
    (`GrocerID`, `GrocerName`, `Address`, `LogoImage`) 
    VALUES ('GID0072', 'BigBazaar','India, Andhra Pradesh, 522124','WIN_20150817_121614.JPG')
    

    并且,使用 real_escape_string() 来防止SQL Injection Attacks

    PHP 提供 real_escape_string() 来转义一个特殊字符 向 MySQL 发送查询之前的字符串。该功能被 许多人在同一场合转义字符串中的单引号 防止 SQL 注入攻击。但是,它可以创建严重的安全性 使用不当会出现缺陷。

    $GrocerName = $conn->real_escape_string($_POST['GrocerName']);
    $Address = $conn->real_escape_string($_POST['Address']);
    $LogoImage = $conn->real_escape_string($_POST['LogoImage']);
    

    【讨论】:

    • 另外提供一些关于sql注入的小技巧,让你的回答更好!!
    【解决方案3】:
    $sql = "INSERT INTO grocery (`GrocerID`, `GrocerName`, `Address`, `LogoImage`)
            VALUES ('$GrocerID', '$GrocerName','$Address','$LogoImage')";
    

    不要将 quotes 用于column_name。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2016-03-26
      • 2013-06-08
      相关资源
      最近更新 更多