php pdo插入到名称中带有问号的列

时间:2012-08-23 13:37:45

标签: php pdo

我花了几个小时尝试使用PDO插入查询,最后我意识到我不能这样做(不知道如何)。 问题实际上是列名有“?”在里面。其中一个专栏名为“如果HSM签证到哪一年?”。因此,每次我插入时,我得到: - 传递的参数数量错误或 - 不能混合名称和?在查询中。

我放弃了这个,我将改变我必须使用的mysql表(无论如何命名带有问号的列?),但我仍然很好奇。

INSERT INTO `tbl_maindetails` (`Id`,`Title`,`If HSM Visa to what year?`) VALUES (?, ?, ?)

谢谢, 戈兰

3 个答案:

答案 0 :(得分:0)

这是我能提出的唯一(丑陋)解决方案:

$db->query("SET @column_name = 'question?'");
$db->query("SET @sql_text = CONCAT('INSERT INTO table1 SET `', @column_name, '` = ?')");
$db->query("PREPARE stmt FROM @sql_text;");
$db->query("SET @v = ?", 'something');
$db->query("EXECUTE stmt USING @v");
echo $db->insert_id();

这会在问题中向table1插入一个新行吗? ='某事'

此代码使用的是PDO包装器,因此您需要对其进行调整。

从长远来看,我认为你通过重命名专栏做出了正确的选择。

答案 1 :(得分:0)

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
我相信

会解决这个问题。

答案 2 :(得分:0)

我有同样的问题!我试图绕过角色“?”之间的困惑。在列(字段)名称和相同的字符“?”作为PDO中的位置(未命名)占位符,通过切换到NAMED参数绑定...但问题仍然存在:(

现在,PDO看到“?”在列名称中,我认为我混淆了命名和位置参数!

例如:

UPDATE myTable SET `title` = :title, `Underwater?` = :Underwater 
WHERE ID='123'

以及以下绑定:

 Array ( [:title] => test  [:Underwater] => 0)

在ERROR MESSAGE之后产生:

"SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters"

请注意,我避免放置任何“?”占位符本身内部(它是“:水下”而不是“:水下?”,但它没有帮助...)

显然,这是一个错误! PDO正在看到“?”在列名中,并得出它是位置占位符的结论,即使我们严格使用NAME参数绑定!

我会看看能不能报告这个错误......

由于MySQL允许列名中有问号,因此我认为没有令人信服的理由可以避免它们! (虽然,在短期内,我会这样做,叹息......)

相关问题