teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

chousei

2021/11/15 09:58

投稿

yambejp
yambejp

スコア117914

answer CHANGED
@@ -4,4 +4,29 @@
4
4
 
5
5
  全部疑問符パラメータにすればよいでしょう
6
6
 
7
- それとnullはinで拾えないし、疑問符パラメータのprepareで渡せないでしょう
7
+ それとnullはinで拾えないし、疑問符パラメータのprepareで渡せないでしょう
8
+ ```PHP
9
+ $year = '2021';
10
+ $flug = [NULL,1,2,3,4];
11
+ $data=[];
12
+
13
+ $sql="SELECT id FROM sample_tbl WHERE 1 ";
14
+ if($year){
15
+ $sql.="AND year = ? ";
16
+ $data[]=$year;
17
+ }
18
+ if(count($flug)){
19
+ $sql.="AND (0 ";
20
+ if(in_array(null,$flug,true)){
21
+ $sql.="OR flug is null ";
22
+ }
23
+ $flug=array_diff($flug, [null]);
24
+ if(count($flug)){
25
+ $sql.="OR flug IN(".implode(",",array_fill(0,count($flug),"?")).")";
26
+ $data=array_merge($data,$flug);
27
+ }
28
+ $sql.=") ";
29
+ }
30
+ print $sql.";<br>\n";
31
+ print_r($data);
32
+ ```

1

追記

2021/11/15 09:58

投稿

yambejp
yambejp

スコア117914

answer CHANGED
@@ -2,4 +2,6 @@
2
2
 
3
3
  「名前と疑問符パラメータを同一の ステートメントのテンプレート中で使用することはできません」
4
4
 
5
- 全部疑問符パラメータにすればよいでしょう
5
+ 全部疑問符パラメータにすればよいでしょう
6
+
7
+ それとnullはinで拾えないし、疑問符パラメータのprepareで渡せないでしょう