【问题标题】:MySQL query working in phpmyadmin but not in php with PDOMySQL 查询在 phpmyadmin 中工作,但在带有 PDO 的 php 中不工作
【发布时间】:2013-03-29 14:24:24
【问题描述】:

当我在 phpmyadmin 中运行此查询时,它运行良好并返回它应该返回的内容。
当我在phpPDO 中运行它时,它失败了。有人能告诉我为什么吗?错误消息表明使用了正确的参数。

我在phpmyadmin 中运行的代码。

SELECT  `fd1`.`id` ,  `fd2`.`id` ,  `fd3`.`id` 
FROM  `food` AS  `fd1` ,  `food` AS  `fd2` ,  `food` AS  `fd3` 
WHERE  `fd1`.`food` =  'Empty'
AND  `fd2`.`food` =  'Carrot'
AND  `fd3`.`food` =  'Empty'

我在php中运行的代码

$sql = 'SELECT  `fd1`.`id` ,  `fd2`.`id` ,  `fd3`.`id` 
        FROM  `food` AS  `fd1` ,  `food` AS  `fd2` ,  `food` AS  `fd3` 
        WHERE  `fd1`.`food` = ? 
        AND  `fd2`.`food` = ? 
        AND  `fd3`.`food` = ?'; 
$stmt = $db->prepare($sql);
$stmt->bindParam(1, $food1, PDO::PARAM_STR);
$stmt->bindParam(2, $food2, PDO::PARAM_STR);
$stmt->bindParam(3, $food3, PDO::PARAM_STR);
$stmt->execute();


if (!$stmt->rowCount())
    die("ERROR:FOOD_SEARCH_FAILURE food:$food1, $food2, $food3 rows returned". $stmt->rowCount());

我也尝试过运行它:

$stmt->execute(array($food1, $food2, $food3)); 

同样的结果

【问题讨论】:

  • 您 100000% 确定 $food1 是空的,$food2 是胡萝卜,等等?查询是否成功? (见How to squeeze error message out of PDO?
  • 不一定是 Empty、Carrot、Empty,可以是表中存储的值的任意组合。我使用了各种值,在phpmyadmin 中它可以工作,在php 它没有
  • 执行后使用errorInfo()查看错误
  • PDO 错误信息是什么?
  • 数组 ([0] => 00000 [1] => [2] => )

标签: php mysql pdo phpmyadmin


【解决方案1】:

首先,按照PDO tag wiki 中描述的方式连接到 PDO,并将错误报告设置为开启,以确保您会看到发生的任何错误。
在查询中生成故意错误以测试您是否可以看到它们。

接下来,如果没有错误,请检查数据库和绑定变量中的数据(您的代码中没有任何地方定义它们)

【讨论】:

    【解决方案2】:

    对于大多数数据库,rowCount() 不会返回受 SELECT 语句影响的行数
    Manual

    【讨论】:

    • 对于 mysql,只有在 PDO 的旧版本的情况下,这可能是一个问题。
    • @YourCommonSense 我不太明白为什么它应该只是古代版本的问题?显然这总是一个问题,因为rowCount 返回受影响(删除/更新/插入但未选择)的行数!
    猜你喜欢
    • 2018-06-19
    • 1970-01-01
    • 2015-05-17
    • 2018-07-19
    • 1970-01-01
    • 2014-06-08
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多