2013-03-01 187 views
3

对于此代码:PHP PDO的execute()返回重复结果

$title = '0'; 
$subTitle = '1'; 
$tableName = 'someString'; 

$stmt = $dbh->prepare("SELECT `".$title."`, `".$subTitle."` FROM `".$tableName."_data` WHERE `id` = :key"); 

$stmt->bindValue(':key', '127'); 
$stmt->execute(); 
$result = $stmt->fetchAll(); 
print_r($result); 

我得到$结果是这样的:

Array 
(
    [0] => Array 
     (
      [0] => 91651 
      [1] => 91651 - DESCRIPTION 
      [2] => 91651 - DESCRIPTION 
     ) 

) 

当预期的结果应该是这样的:

Array 
(
    [0] => Array 
     (
      [0] => 91651 
      [1] => 91651 - DESCRIPTION 
     ) 

) 

当我在mySQL中运行相同的查询时,它会返回预期的结果。当它通过PHP PDO执行时,它会添加一个副本。

谢谢!

+0

听起来很愚蠢,但你完全肯定你没有重复的键吗?你有没有尝试过使用DISTINCT关键字来掩盖这样的违规行为? – christopher 2013-03-01 16:15:21

+0

是的,@ChrisCooney如何说。只有一种方法可以预示发生这种情况。在你的代码中写下类似...“用这个id选择,记住它,如果其他行有相同的id,则继续;” – Stepo 2013-03-01 16:22:44

+0

实际上,主要问题是我在数据库结构上不好。在下面看到我自己的答案。 – ryantkelly 2013-03-01 16:27:08

回答

1

通过数据库比我更好地与别人检查解决...

我傻傻指定的列整数值。

所以,作为“重复值”出现的只是列号和列名相同的事实!

总之,我对数据库结构不好。

+0

请将此答案标记为已接受,将其从“未答复”队列中取出。 – jnthnjns 2013-03-01 16:33:53

-1

您可以更改为使用fetch()而不是fetchAll(),它将返回一行。但我只是确保在数据库中id是唯一的。

0

尝试检查fetch_style和fetch_argument并将其设置为您需要的值。

看到样品#3: http://www.php.net/manual/en/pdostatement.fetchall.php

有时DEP。在您的php版本/ pdo版本中,使用bindvalue时会出现错误。尝试避免这种情况,并使用样本#3代替。

1

使用fetchAll(PDO::FETCH_ASSOC)而不是fetchAll()