前提
PHPにて、SQL文(SELECT)を実行してデータを得体のですが結果が"false"が返ってきます.
実現したいこと
SQL
1SELECT Kgroup.group_id FROM kessyoku JOIN Kgroup ON kessyoku.group_id = Kgroup.group_id AND Kgroup.auto_delete = 1 AND ( kessyoku.date <= 時刻 ) AND ( Kgroup.app = '未閲覧' OR Kgroup.app = '閲覧' ) limit 1
を実行して値を得たいです
発生している問題・エラーメッセージ
$stmh->fetch(PDO::FETCH_ASSOC);で(bool) falseが返ってきます。
Notice: Trying to access array offset on value of type bool in ファイル名
該当のソースコード
php
1 public function auto_delete_Kgroup($three_days_ago){ 2 $sql1 = <<<EOS 3 SELECT Kgroup.group_id FROM kessyoku JOIN Kgroup ON kessyoku.group_id = Kgroup.group_id AND Kgroup.auto_delete = 1 AND ( kessyoku.date <= ':three' ) AND ( Kgroup.app = '未閲覧' OR Kgroup.app = '閲覧' ) limit 1 4 EOS; 5 6 $flag =true; 7 while($flag){ 8 $group_id=""; 9 try { 10 $stmh = $this->pdo->prepare($sql1); 11 var_dump($three_days_ago); 12 $stmh->bindValue(':three', $three_days_ago, PDO::PARAM_STR); 13 $stmh->execute(); 14 // 検索件数を取得 15 $count = $stmh->rowCount(); 16 // 検索結果を多次元配列で受け取る 17 if(!isset($count)){ 18 $flag=false; 19 } 20 $group_id = $stmh->fetch(PDO::FETCH_ASSOC); 21 var_dump($group_id); 22 $group_id =$group_id['group_id']; 23 } catch (PDOException $Exception) { 24 print "エラー:" . $Exception->getMessage(); 25 } 26
試したこと
・コマンドプロンプトに直で打ち込む
SQL
1 SELECT Kgroup.group_id FROM kessyoku JOIN Kgroup ON kessyoku.group_id = Kgroup.group_id AND Kgroup.auto_delete = 1 AND ( kessyoku.date <= '2023-01-30' ) AND ( Kgroup.app = '未閲覧' OR Kgroup.app = '閲覧' ) limit 1 2
→上手くいく
・:threeについている' 'をなくす
php
1//省略 2SELECT Kgroup.group_id FROM kessyoku JOIN Kgroup ON kessyoku.group_id = Kgroup.group_id AND Kgroup.auto_delete = 1 AND ( kessyoku.date <= :three ) AND ( Kgroup.app = '未閲覧' OR Kgroup.app = '閲覧' ) limit 1 3//省略
=>falseのまま(var_dump($three_days_ago)→string(10) "2023-01-17")
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
・$stmh->bindValue()の数値を直接書いてみる
php
1$sql1 = <<<EOS 2 SELECT Kgroup.group_id FROM kessyoku JOIN Kgroup ON kessyoku.group_id = Kgroup.group_id AND Kgroup.auto_delete = 1 AND ( kessyoku.date <= :three ) AND ( Kgroup.app = '未閲覧' OR Kgroup.app = '閲覧' ) limit 1 3 EOS; 4//省略 5 $stmh->bindValue(':three', '2023-01-30', PDO::PARAM_STR); 6 $stmh->execute(); 7//省略 8 } catch (PDOException $Exception) { 9 print "エラー:" . $Exception->getMessage(); 10 }
→上手くいく
補足情報(FW/ツールのバージョンなど)
XAMPP7.4.26-1
回答2件