INSERT语句不适用于PDO

时间:2015-01-26 01:38:05

标签: php mysql pdo

编辑:PDO似乎在列名Unité中存在法语字符问题。是否有解决方案,或者我是否需要重命名数据库中的列?

SELECT语句适用于PDO,但INSERT语句不适用。

连接字符串:

$dbCon = new PDO("mysql:host=".$host.";dbname=".$dbName.";charset=utf8", $username, $password);

使用SELECT语句:

$sql = 'SELECT * FROM availability WHERE event_id=:postID';
$stmt = $dbCon->prepare($sql);
$stmt->execute(array(':postID'=>$postID));
$result = $stmt->fetchAll();

无效的INSERT语句:

$sql = 'INSERT INTO `availability` (`event_id`,`Nom`,`Address`,`Address2`,`Tel1`,`Tel2`,`Tel3`,`Classement`,`Soleil`,`Unité`,`Dispo`,`Ville`,`Type`,`URL`,`Jour1`,`Jour2`,`Jour3`,`Jour4`,`Jour5`,`Jour6`,`Jour7`,`Jour8`,`Jour9`,`Jour10`,`Jour11`,`Jour12`,`Jour13`,`Jour14`,`Jour15`,`visible`) (SELECT :postID,`Nom`,`Address`,`Address2`,`Tel1`,`Tel2`,`Tel3`,`Classement`,`Soleil`,`Unité`,`Dispo`,`Ville`,`Type`,`URL`,`Jour1`,`Jour2`,`Jour3`,`Jour4`,`Jour5`,`Jour6`,`Jour7`,`Jour8`,`Jour9`,`Jour10`,`Jour11`,`Jour12`,`Jour13`,`Jour14`,`Jour15`,`visible` FROM `default_hotels`)';
$stmt = $dbCon->prepare($sql);
$stmt->execute(array(':postID'=>$postID));
$result = $stmt->fetchAll();

另一个有效的SELECT语句:

$sql = 'SELECT post_title FROM wp_posts WHERE id=:postID';
$stmt = $dbCon->prepare($sql);
$stmt->execute(array(':postID'=>$postID));
$records = $stmt->fetchAll();

所有语句都在我的脚本中以此顺序出现。变量被重复使用而不被清除。

我提供的SQL INSERT语句在通过phpmyadmin而不是PDO提交时有效。

1 个答案:

答案 0 :(得分:0)

PHP 5.3.6中支持连接字符串中的PDO charset参数。在此之前它什么也没做。所以问题是与数据库的连接实际上并不是在utf8中运行,而是可能是latin1。因此,PHP和MySQL中列名的编码并不匹配,因此MySQL误解了列名,因此无法找到您要求的列。

请参阅https://stackoverflow.com/a/279279/476了解指定连接编码的其他方法,升级您的PHP版本或使用仅限ASCII的列名称(无论如何这都是个好主意,特别是因为它会产生这样的兼容性问题更不用说了。)