これは長い間バグがありましたが、何が間違っているのかまだわかりません。コードでは、カンマ区切りの文字列で数人のユーザーを選択したいと考えています。文字列は常に正当で有効です。
最初の例では、bindParam を使用して値を$postId
SQL クエリに割り当てます。私はbindParam()
他の多くの呼び出しに使用してきましたが、この特定のケースでは失敗します。
$postId = "1,2,3";
$stm = $this->db->prepare('SELECT * FROM posts WHERE find_in_set(userId, "?") ORDER BY id DESC');
$stm->bindParam(1, $postId, PDO::PARAM_STR);
$stm->setFetchMode(PDO::FETCH_ASSOC);
$stm->execute();
$results = $stm->fetchAll();
return print_r($results,true);
このコードは次を返します。
array (
)
私が本当に使いたくないこの他のコードでは、$postId
right の値を sql クエリに渡すだけです。
$stm = $this->db->prepare('SELECT * FROM posts WHERE find_in_set(userId, "'.$postId.'") ORDER BY id DESC');
$stm->setFetchMode(PDO::FETCH_ASSOC);
$stm->execute();
$results = $stm->fetchAll();
return print_r($results,true);
このコードは、取得するはずのすべての行を返します。
私の質問は; 具体的な問題は何ですか?また、これを繰り返さないようにするにはどうすればよいですか?