2011-09-28 63 views
0

下面的查詢運行良好,運行速度非常快。但是它顯示了一些非常奇怪的行爲,如下所述。非常奇怪的PDO-> bindparam行爲php

然而在PHP中,它似乎決定了它自己的工作方式。我確信代碼是正確的。我在PHP中使用PDO並根據需要綁定變量。

因此,例如,如果我通過它的author_id 600它將工作,但如果我通過它author_id 2它將無法正常工作,並沒有記錄。但是,如果我回應查詢並將其粘貼到MySQL並運行它,它適用於這兩個ID。似乎PDO未能將變量綁定在某些ID上。我回應了id變量,它確實包含正確的id。

有沒有其他人經歷過這種行爲?我覺得這很不尋常。 !

SELECT 
GROUP_CONCAT(a.author_id) AS author_ids 
FROM 
references_final AS rf 
INNER JOIN (reference_authors AS ra INNER JOIN authors_final AS a ON (ra.author_id = a.author_id)) 
ON (rf.reference_id = ra.reference_id) 
GROUP BY rf.reference_id HAVING :author_id IN (author_ids) 
+2

請將您的問題降到最低限度,並給它一個更具描述性的標題。 – hakre

+0

您是否傾銷了這兩個ID的查詢? – markus

+0

事實上,我已經把它們都傾倒了。它們看起來與上面相同,但因爲我使用的是PDO bindparam,所以我實際上不能在查詢字符串中轉儲值,但如果查詢是相同的,並且author_id變量的轉儲是相同的,那麼它們都應該是相同的,我會有想法。 – jiraiya

回答

0

嘿我有同樣的問題,隨着BindParam和ID值在我的PDO聲明

$retrieveUsersToken = $dataBase->prepare('SELECT TheUsersTable.token AS token, TheUsersTable.myID AS myID, 
FROM TheUsersTable INNER JOIN TheCategoryListTable ON TheUsersTable.myID = TheCategoryListTable.userID 
WHERE TheUsersTable.myID != :userID AND TheCategoryListTable.category = :category'); 

$retrieveUsersToken->bindParam(':category', $_POST['category'], PDO::PARAM_STR); 
$retrieveUsersToken->bindParam(':userID', $_POST['creatorID'], PDO::PARAM_INT); 

身份識別碼=用戶ID永遠不會奏效 neighter不TheCategoryListTable.category =:當類:類別包含空格 看起來Inner Inner在兩種情況下都會製造麻煩。

這不是一個真正的答案,但也許binValue效果更好。