実現したいこと
prepare()でCall to a member function prepare() on nullが出てしまっているので、そちらを解決して、削除し処理を完成させたいです。
現状
現在MYSQL練習として簡単なtodoリストを作成しているのですが、todoを完了した時に、そのデータを削除するための処理でこのエラーが出てしまい、エラー文で検索をかけたりしたのですが、いまいち解決にたどり着けないので質問させていただいた次第です。
該当のソースコード
php
1//index.phpです 2require_once "DBconnect.php"; 3try { 4 $pdo->beginTransaction(); 5 $sql = "INSERT INTO todo (todo) VALUES (:todo)"; 6 $stmh = $pdo->prepare($sql); 7 $stmh->bindValue(':todo', $_POST['todo'], PDO::PARAM_STR); 8 $stmh->execute(); 9 $pdo->commit(); 10} catch (PDOException $Exception) { 11 $pdo->rollBack(); 12 print 'エラー:' .$Exception->getMessage(); 13} 14?> 15<div class="usermessage"> 16 <table border="1"> 17 <h1>やること</h1> 18 <?php 19 require_once "DBconnect.php"; 20 $sql = "SELECT * FROM todo WHERE 1"; 21 $stmh = $pdo->prepare($sql); 22 $stmh->execute(); 23 24 while(1) 25 { 26 $row = $stmh->fetch(PDO::FETCH_ASSOC); //1レコード取り出し 27 if($row == false) //データがもうない場合 28 { 29 break; //ループから脱出 30 } 31 ?> 32 <h3><?=htmlspecialchars($row['todo'], ENT_QUOTES)?></h3> <!-- データベースのデータを表示 --> 33 <a class="btn btn-outline-primary" href=index.php?id=". $row['id'] ." > 完了 </a> 34 <?php 35 } //whileの閉じタグ 36 $pdo = null; 37 ?> 38</div> 39 40<?php 41//削除処理 42try { 43 44 $stmh = $pdo->prepare('DELETE FROM todo WHERE id = :id'); //この文でエラーが出ています 45 $stmh->execute(array(':id' => $_POST['id'])); 46} catch(PDOException $Exception) { 47 echo 'エラーが発生しました。:' . $Exception->getMessage(); 48}
php
1//DBconnect.phpです 2$user = "root"; 3$password = "root"; 4$host = "localhost"; 5$dbname = "todolist"; 6$dbtype = "mysql"; 7 8$dsn = sprintf( 9 "%s:host=%s;dbname=%s;charset=utf8", 10 $dbtype, 11 $host, 12 $dbname, 13); 14 15try { 16 $pdo = new PDO($dsn, $user, $password); 17 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 18 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 19} catch (PDOException $Exception) { 20 die('エラー:' .$Exception->getMessage()); 21}
エラーが発生している、
$stmh = $pdo->prepare('DELETE FROM todo WHERE id = :id');
の$pdoが悪いのはわかっているのですが、僕が確認したところだと問題はなかったです。
以上です。
わかる方がいらしたらご回答よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/01 11:53
2020/07/01 11:58
2020/07/01 12:15 編集
2020/07/01 12:11
2020/07/01 12:21
2020/07/01 12:23 編集
2020/07/01 22:00
2020/07/01 22:01
2020/07/01 22:05
2020/07/01 22:51
2020/07/02 05:43