2013-02-18 105 views
0

這將返回結果:sql查詢在PHP PDO不工作

$query = $dbh->prepare('SELECT * FROM groups WHERE id LIKE :id ORDER BY id'); 
$query->bindValue(':id', $this->id.'_'); 

這不:

$query = $dbh->prepare('SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id WHERE g.id LIKE :id AND d.desc_type=1 ORDER BY g.id'); 
$query->bindValue(':id', $this->id.'_'); 

。不過,如果我跑在Webmin下面的SQL查詢( 「0002_」 是價值被綁定在上面),然後我得到結果。

SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id WHERE g.id LIKE "0002_" AND d.desc_type=1 ORDER BY g.id 

那麼爲什麼PDO不喜歡上面第二段代碼中的查詢?

+0

你有一些錯誤? – 2013-02-18 11:28:30

+0

數據庫中id的數據類型是什麼? – voncox 2013-02-18 11:32:23

+0

@echo_me:不,沒有生成異常。 – 2013-02-18 11:45:02

回答

1

好吧,我把它釘:

正如我在最初的問題說,下面的代碼不返回的結果:

$query = $dbh->prepare('SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id WHERE g.id LIKE :id AND d.desc_type=1 ORDER BY g.id'); 
$query->bindValue(':id', $this->id.'_'); 

此代碼返回預期的結果:

$query = $dbh->prepare('SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id AND d.desc_type=1 WHERE g.id LIKE :id ORDER BY g.id'); 
$query->bindValue(':id', $this->id.'_'); 

奇怪的是,任何SQL查詢都會在Webmin內運行時返回結果,但似乎PHP PDO不希望將「AND d.desc_type = 1」作爲WHERE子句的一部分並需要它在LEFT JOIN ON子句中。

-1

爲什麼PDO不喜歡上面第二段代碼中的查詢?

問PDO:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

如果PDO不拋出任何錯誤 - 它「喜歡」你的查詢和無關的問題。檢查您的數據,數據庫和拼寫錯誤。

最後檢查省略bindvalue部分

$stmt = $dbh->prepare('put your query from WEBMIN here'); 
$stmt->execute(); 
$res = $stmt->fetch(); 
var_dump($res); 

如果retirns任何數據 - 怪PDO
如果不是 - 檢查你的數據,數據庫和錯別字。

+0

已經到位了,我把代碼放在try/catch中,所以它會顯示我生成的任何錯誤:沒有。 – 2013-02-18 11:41:21

+0

我檢查並重新檢查數據,數據庫和錯別字,但我沒有看到任何問題(我的代碼示例被複制和粘貼)。我認爲當我在Webmin中運行查詢時得到了結果,證明查詢很好並返回結果(因此數據也必須是好的)。然後我複製並將其粘貼到我的PHP中,只更改LIKE參數。我認爲我的第一段代碼證明了LIKE中bindValue和id的使用是可以的。我知道這將是我的一個愚蠢的錯誤,但我找不到它。 – 2013-02-18 11:59:21