非常奇怪的PDO-> bindparam行为php

时间:2011-09-28 11:11:33

标签: php mysql pdo having-clause

下面的查询运行良好,运行速度非常快。然而,它显示了一些非常奇怪的行为,如下所述。

然而,在PHP中,它似乎自己决定它将起作用的哪些ID。我确信代码是正确的。我在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) 

1 个答案:

答案 0 :(得分:0)

嘿,我的PDO语句中的BindParam和ID值存在同样的问题

$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);

myID!= userID永远不会有效 neighter做TheCategoryListTable.category =:category when:category包含空格 看起来Inner Join在我们的两种情况下都会产生麻烦。

这不是一个真正的答案,但也许binValue会更好。