【问题标题】:INSERT statement does not work with PDOINSERT 语句不适用于 PDO
【发布时间】: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

标签: php mysql pdo


【解决方案1】:

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

请参阅https://stackoverflow.com/a/279279/476 了解指定连接编码、升级 PHP 版本或仅对列名使用 ASCII 的替代方法(无论如何,这都是个好主意,特别是因为它使这样的兼容性问题更容易解决)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2017-07-14
    • 2021-01-29
    相关资源
    最近更新 更多