PHP PDO SQL 语法错误

标签 php mysql pdo

<分区>

我已经在互联网上四处寻找,但未能解决这个问题。

我正在尝试通过此函数使用 PDO 将一行插入到 mySQL 表中

function newItem($name, $desc, $price, $catID){
    echo $name . "\n";
    echo $price . "\n";
    echo $desc . "\n";
    echo $catID . "\n";

    $conn = self::connect();
    //INSERT Order
    $sql = "INSERT INTO catalogue (Name, Price, CatID, Desc)
    VALUES ('$name', $price, $catID, '$desc')";
    // use exec() because no results are returned
    $conn->exec($sql);

}

当我这样做时,我得到这个错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Desc) VALUES ('User', 0.00, 3, 'theUser')' at line 1' in C:\xampp\htdocs\classes\catalogue.php:65 Stack trace: #0 C:\xampp\htdocs\classes\catalogue.php(65): PDO->exec('INSERT INTO cat...') #1 C:\xampp\htdocs\classes\main.php(39): Catalogue->newItem('User', 'theUser', '0.00', '3') #2 {main} thrown in C:\xampp\htdocs\classes\catalogue.php on line 65

我可以确认 self::connect(); 方法有效,只有当我尝试将数据插入 Desc 列时才会出现问题。

我花了很多时间尝试解决这个问题,但是我对 PDO 的了解非常模糊......

谁能看出我哪里出错了?

echo 显示:

User 0.00 theUser 3 

最佳答案

DESC 是关键字。您必须使用 backtics 转义列名称或更好地重命名该列。

$sql = "INSERT INTO catalogue (Name, Price, CatID, `Desc`)
    VALUES ('$name', $price, $catID, '$desc')";

有关关键字的更多信息,请参阅 official documentation .

关于PHP PDO SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37434454/

相关文章:

php - 在 PHP 中删除字符串中的任意数字

php - 在 PHP 中限制数组的长度

php - 在 OpenCart 中通过 AJAX 加载产品内容

php - Laravel - 使用 HTML 表单而不是 Collective HTML/Illuminate

php - mysql 数据库中带有空行的 htaccess

Xampp 中的 mySql 不允许我从命令行启动 mysqld

php - 如何使用 PHP 更新 mysql 中的一行数据?

java - MySQL简单查询错误

php - 对 MySQL 查询的 PHP 结果进行“分组”

php - PDOStatement::rowCount 结果在 PDO::commit 之后使用?