###前提・実現したいこと
$array = [ 1, 2 ];
という不定数の配列があるとき、以下のように関数prepare()
に1,2
という「整数のカンマ区切り」で渡したいです。
php
1prepare( 1, 2 ); // こう渡したい 2prepare( '1, 2' ); // こうではない 3prepare( '1', '2' ); // こうではない
###発生している問題
WordPressでレコードを取得するとき、文字列なら問題なく%s
をprepare()
で置換できますよね。
php
1$array = [ 'nameA', 'nameB' ]; 2$values = implode( ',', $array ); 3$sql = "SELECT * FROM wp_test WHERE col_str_1 = %s and col_str_2 = %s"; 4$rows = $wpdb->get_results( $wpdb->prepare( $sql, $values ) );
では文字列でなく整数のとき、同じようにprepare()
を使って取得するにはどうすればいいのでしょうか?
例えば以下ですと、prepare()
に入る$values
はimplode()
で文字列になってしまうため取得できません。
php
1$array = [ 1, 2 ]; 2$values = implode( ',', $array ); 3$sql = "SELECT * FROM wp_test WHERE col_int_1 = %d and col_int_2 = %d"; 4$rows = $wpdb->get_results( $wpdb->prepare( $sql, $values ) );
つまり上記ではこのように渡されてしまいます。
php
1$rows = $wpdb->get_results( $wpdb->prepare( $sql, '1, 2' ) );
なんとか次の状態でprepare()
に渡さなければならないわけで、どうすればいいのか戸惑っています。
php
1$rows = $wpdb->get_results( $wpdb->prepare( $sql, 1, 2 ) );
###試したこと
悪あがきですが1つずつintval()
を通してみたりしたのですが...
php
1$array = [ 1, 2 ]; 2$str = implode( ',', $array ); 3$result = ''; 4foreach ( explode(',',$str) as $val ){ 5 $result .= intval($val) . ','; 6} 7$result = rtrim($result,','); 8var_dump($result);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 09:11
2020/02/18 09:25 編集
2020/02/18 09:28
2020/02/18 09:35
2020/02/18 09:58