SQL 由单引号引起的错误#1054?

SQL Error #1054 caused by single quotes?

我建立了一个 PHP 页面,它向两个不同的 table 发送几乎相同的信息(一个可供网站的所有用户访问,另一个是用户的个人 table).

$post = "INSERT INTO `Alpha` (`number`, `field1`, `field2`, 
`field3`, `field4`, `field5`, `field6`, `field7`, `field8`, `field9`,
`field10`) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0')";
$dbh = new PDO( "mysql:dbname=essay;host=localhost", "root", "password" );
$selectStatement = $dbh->prepare( $post );
$selectStatement->bindValue(1, $name, PDO::PARAM_STR);
$selectStatement->bindValue(2, $id, PDO::PARAM_INT);
$selectStatement->bindValue(3, $head, PDO::PARAM_STR);
$selectStatement->bindValue(4, $text, PDO::PARAM_STR);
$selectStatement->bindValue(5, $topic1, PDO::PARAM_STR);
$selectStatement->bindValue(6, $topic2, PDO::PARAM_STR);
$selectStatement->bindValue(7, $topic3, PDO::PARAM_STR);
$selectStatement->bindValue(8, $date, PDO::PARAM_INT);
$selectStatement->execute();

这是第一个 table 的代码,并且有效。第二个 table 的代码从字面上复制并粘贴 - 唯一的区别是 table 名称已更改(因为它对用户来说是唯一的,它现在也在准备好的语句中)和其中一个字段名称已更改(并且我创建了一个新的 PDO 对象),但由于某种原因它不起作用。

我将一个字符串放在一起,表示 SQL 查询应该是什么样子,每次我进行查询时都会回显它,当我手动输入它时,我收到错误 #1054。

奇怪的是,如果我更改查询,将所有字符串值都用单引号引起来,错误就会消失。当然,这很令人困惑,因为第一个查询不需要单引号——为什么第二个查询需要单引号,因为它们几乎相同?我的 SQL table 是否有某种我不知道的奇怪设置?如果我能让数据库接受没有单引号的查询,那将是理想的。

无论如何,当我在准备好的语句中将单引号附加到变量的两端时,准备好的语句似乎将它们剥离,所以我不确定如何打开单引号,但如果我我可以认为解决方案就足够了吗?

你试过PDO::quote了吗?看起来它可以处理转义字符串,可能有助于解决您面临的那些问题。

Table(和列)名称不能作为准备好的语句中的参数提供,您的描述使我相信您已经做到了。

See this old SO question