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

时间:2015-08-06 13:15:26

标签: php mysql pdo quotes

我已经构建了一个PHP页面,它将几乎相同的信息发送到两个不同的表(一个可以被站点的所有用户访问,另一个是用户的个人表)。

$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();

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

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

奇怪的是,如果我改变查询以使我的所有字符串值都用单引号括起来,那么错误就会消失。当然,这是非常令人困惑的,因为第一个查询不要求单引号 - 为什么第二个,因为它们几乎相同?我的SQL表上是否有某种奇怪的设置,我不知道?如果我可以让数据库接受查询而不使用理想的单引号。

无论如何,当我在准备好的语句中将单引号添加到变量的两端时,准备好的语句似乎正在将它们删除,所以我不确定如何获取单引号,但如果可以的话假设解决方案就足够了。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

表(和列)名称不能作为准备语句中的参数提供,您的描述会让我相信您已完成。

See this old SO question