匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

PHPでMysqlのクエリ文で、条件数が可変時、スマートに文を作る


こんにちは、PHPとMysqlで何か作ろうとしている初心者です。

mysqlでクエリを送るときに例えば…
$stmt = $pdo->prepare("SELECT hoge FROM hogetable WHERE id=? or id=?");
$id=array(56,34);
$stmt->execute($id);
といった文を書くと思います。この状況でidの数を可変にしたい時
自分はまず"SELECT hoge FROM hogetable WHERE"だけの文を作り、
executeする配列数文、"or id=?"を結合し、最後にいらいない"or"をltrimして
最初に書いた文に結合、executeしているのですが、もっとラクな方法はないでしょうか?
それともこのやり方が普通なんですかね?

回答いただけたら有難いです。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/08/20 08:03:18
  • 終了:2013/08/27 08:05:04

ベストアンサー

匿名回答2号 No.2

匿名回答2号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/08/20 11:29:36

"or id=?"を結合し、最後にいらいない"or"をltrim


php覚えたいなら文字列操作関数覚えたほうがよくない?
http://php.net/manual/ja/function.str-repeat.php

$id=array(56,34);
$sql = "SELECT hoge FROM hogetable WHERE id=?" . str_repeat(" or id=?", count($id) - 1);
$stmt = $pdo->prepare($sql);
$sql = "SELECT hoge FROM hogetable WHERE id in (?" . str_repeat(",?", count($id) - 1) .")";
匿名質問者

回答ありがとうございます。
文字列操作関数を知った気になっていましたが
結構バリエーションがあるんですね…

2013/08/20 16:50:24

その他の回答(2件)

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/08/20 08:58:55

普通、複数の値を ORしたい場合は inを使います。

id in (?,?,?)

他1件のコメントを見る
匿名回答1号

?の数は たくさんにしておいて 配列の数を超えた分は 最初の 数にしておけばいいかもしれません。

たとえば
配列が 1,2,3とあったら
?,?,?,?,? で作って
1,2,3,1,1
とすればいいでしょう。

2013/08/20 09:27:59
匿名質問者

回答ありがとうございます。
なるほど!その手がありましたか!

2013/08/20 09:33:32
匿名回答2号 No.2

匿名回答2号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/08/20 11:29:36ここでベストアンサー

"or id=?"を結合し、最後にいらいない"or"をltrim


php覚えたいなら文字列操作関数覚えたほうがよくない?
http://php.net/manual/ja/function.str-repeat.php

$id=array(56,34);
$sql = "SELECT hoge FROM hogetable WHERE id=?" . str_repeat(" or id=?", count($id) - 1);
$stmt = $pdo->prepare($sql);
$sql = "SELECT hoge FROM hogetable WHERE id in (?" . str_repeat(",?", count($id) - 1) .")";
匿名質問者

回答ありがとうございます。
文字列操作関数を知った気になっていましたが
結構バリエーションがあるんですね…

2013/08/20 16:50:24
匿名回答3号 No.3

匿名回答3号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/08/21 11:19:10

配列の要素数だけ ? を , でつなぎたいって事だから
? が同じ要素数だけある配列を作って , で連結すれば得られるでしょう。

$id = array(56,34);
$sql = 'SELECT hoge FROM hogetable WHERE id IN ('
      . (empty($id) ? '0' : implode(',', array_fill(0, count($id), '?')) )
      . ')';
匿名質問者

回答ありがとうございます。

2013/08/29 13:03:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません