質問を修正しました。
前提・実現したいこと
MYSQL内のDBをPHPで検索しようとしています。
発生している問題・エラーメッセージ
foreach()が配列になっていないことが問題なのはわかったのですが、配列にする方法が分かりません。
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\phplesson\chap01\hello.php on line 29
該当のソースコード(追記:データベースに正しく接続されていないことが原因でした)
PHP
1<?php 2 //データベースへ接続 3 $dsn = "mysql:dbname=e-money-test;host=localhost;charset=utf8mb4"; 4 $username = "root"; 5 $password = ""; 6 $options = []; 7 $db = new PDO($dsn, $username, $password, $options); 8 9 $query = "SELECT * FROM 'store_data' 10 WHERE Store_Name LIKE '%".$_POST["Name"] ."%'"; 11 12 if(@$_POST["Name"] != ""){ 13 $stmt = $db->query($query); //SQL文を実行して、結果を$stmtに代入する。 14 } 15 16 ?> 17 18<html> 19 <head> 20 <title>Search e-money</title> 21 </head> 22 23 <body> 24 <form action="hello.php" method="Post"> 25 Name:<input type="text" name="Name"><br> 26 <input type="submit"> 27 </form> 28 29 <?php foreach ($stmt as $row): ?> 30 <tr><td><?php echo $row[0]?></td><td><?php echo $row[1]?></td></tr> 31 <?php endforeach; ?> 32 33</body> 34</html> 35
試したこと
foreach ((array)$stmt as $row):
とすると、
Trying to access array offset on value of type bool in C:\xampp\htdocs\phplesson\chap01\hello.php on line 30
と表示されてしまいました。
###追記(追記:ATTR_EMULATE_PREPARESが誤字でした)
データベースに接続できていないことがわかり、接続できているかを調べましたが、「エラーがありました」と表示されました。「SELECT ID FROM store_data WHERE ID = 1」をPHPMyAdmin のe-money-testのSQL欄で実行してみたところ、エラーは出ずstore_data の ID = 1の表が表示されました。
php
1<?php 2//データベース定義 3$user = 'root'; 4$password = 'root'; 5$dbName='e-money-test'; 6$host = 'localhost'; 7$dsn="mysql:host={$host};dbname={$dbName};charset=utf8mb4"; 8 9//データベース接続 10 11try { 12$pdo = new PDO($dsn, $user, $password); 13$pdo->setAttribute(PDO::ATTER_EMULATE_PREPARES, false); 14$pdo->setAttribute(PDO::ATTER_ERRMODE, PDO::ERRMODE_EXCEPTION); 15 16echo '接続できました'; 17$stmt = $db -> prepare("SELECT ID FROM store_data WHERE ID = ?"); 18$stmt = bindvalue(1, 1); 19$stmt = execute(); 20 21var_dump($stmt); 22 23} catch (Exception $e){ 24echo 'エラーがありました。'; 25// echo $e->getMessage; 26exit(); 27} 28
回答2件
あなたの回答
tips
プレビュー