0

下面的查询运行良好,并且运行速度非常快。但是,它显示出一些非常奇怪的行为,如下所述。

然而,在 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) 
4

1 回答 1

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

当 :category 包含空间时,myID != userID 永远不会工作 TheCategoryListTable.category = :category 看起来 Inner Join 在我们的两种情况下都会造成麻烦。

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

于 2011-12-02T16:07:03.193 回答