2013-03-01 186 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()