私のこのクエリは何も返しません。エラーは発生しません。このサイトで解決策が見つかりません。ここで何が問題なのですか?
$query = "SELECT * FROM `votes` WHERE `tags` IN (:tags)";
$stmt = $dbh->prepare($query);
$stmt->bindValue(':tags', 'one, two, three');
$stmt->execute();
// 0 results, should be more
bindParam() または bindValue() を使用するかどうかに関係なく、それはあなたが望むことをするつもりはありません。
SQL クエリ パラメータは、1 つの値のみを置き換えます。コンマを含む文字列をバインドして、複数の値として解釈することはできません。リスト内の個別の値ごとに 1 つのパラメーター プレースホルダーが必要です。
また、パラメータ値を PDO にバインドする必要はまったくありません。配列を execute() に渡すことができます。この場合、名前付きパラメーターの代わりに位置パラメーターを使用します。PDO は両方をサポートしますが、1 つのクエリにそれらを混在させないでください。
$query = "SELECT * FROM `votes` WHERE `tags` IN (?, ?, ?)";
$stmt = $dbh->prepare($query);
$params = explode(', ', 'one, two, three');
$stmt->execute($params);
バインド値にエラーがあります。
$stmt->bindValue(':tags', 'one, two, three');
する必要があります
$stmt->bindValue(':tags', "'one', 'two', 'three'");
代わりにPDO:: bindParamを使用してみてください。
$query = "SELECT * FROM `votes` WHERE `tags` IN (:tags)";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':tags', implode(",", array('one, two, three')));
$stmt->execute();
implode を使用すると、バインドの本来の目的が無効になり、元の配列の代わりに文字列化された配列がバインドされます。