実現したいこと
PHPのPDOで複数のhostidのデータを WHERE IN を使いたいです。
hostidの数は可変です。
参考URLをもとに作成してみましたが、うまく動作しません。
executeの引数を3つ実行できないのでしょうか?
ご教示お願いいたします。
前提
[バージョン]
PHP:7.2.24
MariaDB:10.5.10
流したいSQL(例)
select * from tbl where hostid in (1005, 1006) AND col between '2022-07-05 00:00' AND '2022-09-27 13:00';
検証用コード
SQL
1create table tbl (hostid int not null primary key, name varchar(30), val varchar(30), col timestamp not null) 2 3insert into tbl values 4(1001,'takuya','grape','2022-07-01 08:30:00'), 5(1002,'taro','orange','2022-07-01 09:30:00'), 6(1003,'yuta','apple','2022-07-14 08:30:00'), 7(1004,'makoto','cat','2022-07-20 08:30:00'), 8(1005,'shun','dog','2022-08-01 08:30:00'), 9(1006,'tomo','tiger','2022-09-01 08:30:00');
<?php try { // 過去〇週間前の日付取得 $startDateTime = new DateTime('-12 weeks'); $start_date = $startDateTime->format('Y-m-d 00:00'); // 現在時刻取得 $endDateTime = new DateTime('now'); $end_date = $endDateTime->format('Y-m-d H:i'); $user_id = '1005,1006'; $user_ids = explode(',', $user_id); $dbh = new PDO('mysql:host=localhost;dbname=base_info', 'dbuser', 'Paaword1!'); // $sql = "select * from tbl where col BETWEEN $start_date AND $end_date"; $sql .= 'AND hostid IN (' . substr(str_repeat(',?', count($user_ids)), 1) . ')'; $stmt = $dbh->prepare($sql); $stmt->execute($user_ids, $start_date, $end_date); var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); } catch (Exception $e) { print "error!! " . $e->getMessage() . PHP_EOL; } $dbh = null; ?>
エラーメッセージ
PHP Warning: PDOStatement::execute() expects at most 1 parameter, 3 given in /var/www/html/waiis/model/test5.php on line 21 array(0) { }
参考URL
https://chaika.hatenablog.com/entry/2016/06/22/092149
https://qiita.com/mgmgmogumi/items/570cfaef75bd142a1d44
回答2件
あなたの回答
tips
プレビュー