<!DOCTYPE html> <html lang = “ja”> <head> <meta charset = “UFT-8”> <title></title> </head> <body> <?php $dsn = "mysql:host=localhost;dbname=section_08;charset=utf8;"; $user = 'root'; $pass = ''; try{ // DBへ接続 $db = new PDO($dsn,$user,$pass); // エラー時に例外処理をthrowする $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if ($db == null){ print('接続に失敗しました。<br>'); }else{ print('接続に成功しました。<br>'); } /*テーブル作成*/ // プリペアドステートメントを利用 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // トランザクション開始 $db->beginTransaction(); $db->query('CREATE TABLE IF NOT EXISTS test( id INT(11) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10), price INT(11), age INT(11) )'); // データ格納 $aryInsert=[]; $aryInsert[]=['name'=>"'hoge'", 'price'=>100, 'age'=>10]; $aryInsert[]=['name'=>"'moge'", 'price'=>200, 'age'=>20]; $aryInsert[]=['name'=>"'hogehoge'", 'price'=>300, 'age'=>30]; $aryInsert[]=['name'=>"'mogemoge'", 'price'=>400, 'age'=>40]; // SQL作成 $sql = "INSERT INTO moge(name, price, stock)VALUES"; $arySql1=[]; // 行(レコード)の繰り返し foreach($aryInsert as $key1 => $val1){ $arySql2 = []; //列(カラム)の繰り返し foreach($val1 as $key2 => $val2){ // var_dump($val2); $arySql2[] = $val2; } $arySql1[] = '('.implode(',', $arySql2).')'; } // var_dump($arySql1); $sql .= implode(',', $arySql1); // var_dump($sql); $sth = $db -> exec($sql); // クエリ実行, Q3.価格が安い順:order by $sql = $db->query('SELECT * FROM test order by age'); // レコードをすべて配列にして取得 $rows = $sql->fetchAll(); foreach($rows as $row){ echo 'id->'.$row['id']."<br>"; echo 'name->'.$row['name']."<br>"; echo 'price->'.$row['price']."<br>"; echo 'age->'.$row['age']."<br>"; } $sth = $db->query('SELECT name,age FROM test WHERE name like "plum"'); $sth = 'UPDATE test SET age=age-30 WHERE name like "moge"'; $result = $db->exec($sth); }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } ?> <!-- test TABLE --> <h1>test</h1> <table border='1'> <tr><td>id</td><td>name</td><td>price</td><td>age</td></tr> <?php foreach($rows as $row){ ?> <tr> <td><?php echo $row['id']; ?></td> <td><?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?></td> <td><?php echo $row['price']; ?></td> <td><?php echo $row['age']; ?></td> </tr> <?php } ?> </table> </body> </html>
前提・実現したいこと
PHP/pdo/mysqlにて、phpよりテーブルを作成してwebフォームとつなげるシステムを作っています。
テーブルの重複がないよう、同じテーブルの名前がなければテーブルを作成するという機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
ブラウザを更新するたびに、テーブルデータがそれぞれ増えてしまっています。
該当のソースコード
$db->query('CREATE TABLE IF NOT EXISTS moge( id INT(11) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10), price INT(11), stock INT(11) )');
試したこと
調べたところ、このやり方もあるということだったので試してみました。
しかし、num_rowsとcloseで定義されていないというエラーが出てしまいます。
if ($result = $db->query("SHOW TABLES LIKE 'test'")) { if ($result->num_rows) { echo 'テーブルが存在'; } // 結果セットの開放 $result->close(); }
補足情報(FW/ツールのバージョンなど)
ループの部分が原因なのでしょうか。
お力添えいただければ幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。