【发布时间】:2015-01-26 01:38:05
【问题描述】:
编辑: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 提交时有效。
【问题讨论】:
-
如果你愿意...清理整数值非常容易,这样可以安全地进行变量插值...
select $postID, whatever from whatever...只要确保它包含只有数字。is_numeric会为您测试它...或者您可以使用正则表达式...$postID = preg_replace ('/[^0-9]/', '', $postID);实际清理它 -
您是否尝试得到错误?试试
print_r($stmt->errorInfo()); -
@RxV 看起来 PDO 不喜欢列
Unité中的法语字符。有解决办法吗? -
你的表是什么排序规则类型?
-
@RxV
utf8_general_ci