PHP PDO SQL语法错误

Jam*_*ter 0 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);

}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

谁能看到我出错的地方?

echo表明:

User 0.00 theUser 3 
Run Code Online (Sandbox Code Playgroud)

Jen*_*ens 5

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

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

有关关键字的更多信息,请参阅官方文档.