ブール値(別名tinyint、1または0)を含むMySQLの列「public」があります。クエリを行うときは、一般的にパブリックカラムの値は気にしないので、デフォルトではアンダースコア(MySQLワイルドカード)を渡します。場合によっては、「public = 0」または「public = 1」と一致する行のみが必要になるので、下線を0または1で上書きします。これは私が今までに与えた最も明白な説明ではありません:PDOパラメータとして「真または偽」をバインドする
public function get_hunts($public = '_') {
$sth = $this->_db->prepare("SELECT * FROM hunts WHERE(user_id = :user AND public = :public)");
$sth->bindParam(':user', $this->_id);
$sth->bindParam(':public', $public);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
//get any result
get_results();
//get only public results
get_hunts(1)
このようにアンダースコア(私も一般的なワイルドカード%を試してみました)をバインドすると、クエリが失敗します。これを達成するより良い方法は何ですか?
よく考えられた答えをありがとう。今のところ、私は、 "public =:public"を "public LIKE:public"と交換しました。フィルは示唆したとおり、ワイルドカードを使用できます。純粋に迅速かつ簡単な修正だったからです。あなたの答えとPhilの長い方の選択肢はおそらくもっと良い解決策かもしれないので、私は何かを学びました。 – MartinAnsty
+1「CASE」の使い方がいいです。参考までに、2番目の ':user'バインディングは':public'でなければなりません – Phil
@MartinAnsty提案されていません。あなたは怠惰と無知から間違った解決策を選択します –