INSERT 语句不适用于 PDO
INSERT statement does not work with 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 提交时有效。
PHP 5.3.6 开始支持连接字符串中的 PDO charset
参数。在此之前它什么也没做。所以问题是与数据库的连接实际上不是 utf8 中的 运行,而是可能是 latin1。因此 PHP 和 MySQL 中列名的编码不匹配,因此 MySQL 误解了列名,因此找不到您要求的列。
请参阅 以了解指定连接编码的替代方法,升级您的 PHP 版本,或对列名使用仅 ASCII(无论如何这是一个好主意,特别是因为它使兼容性像这样的问题要少得多)。
编辑: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 提交时有效。
PHP 5.3.6 开始支持连接字符串中的 PDO charset
参数。在此之前它什么也没做。所以问题是与数据库的连接实际上不是 utf8 中的 运行,而是可能是 latin1。因此 PHP 和 MySQL 中列名的编码不匹配,因此 MySQL 误解了列名,因此找不到您要求的列。
请参阅 以了解指定连接编码的替代方法,升级您的 PHP 版本,或对列名使用仅 ASCII(无论如何这是一个好主意,特别是因为它使兼容性像这样的问题要少得多)。