実現したいこと
DB接続でCall to undefined method DbCnct::query()
と出てしまっているので、そちらを解決したいです。
現在の状況
就職活動用のポートフォリオの一つである、アンケートフォームの作成中で、query()で接続エラーが発生してしまいます。
ソースコード
php
1//DBconnect.php データベース接続ファイル 2 3class DbCnct { 4public function dbConnect() { 5 $user = "root"; 6 $password = "root"; 7 $host = "localhost"; 8 $dbname = "anketoform"; 9 $dbtype = "mysql"; 10 $dsn = sprintf( //データベース接続文 11 "%s:host=%s;dbname=%s;charset=utf8", 12 $dbtype, 13 $host, 14 $dbname, 15 ); 16 17 18 try { 19 $pdo = new PDO($dsn, $user, $password); 20 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //接続時にエラーを検知してメッセージを表示できるようにする 21 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //エミュレートするかしないか決めるための設定 22 } catch (PDOException $Exception) { 23 die('エラー:' .$Exception->getMessage()); //エラーメッセージの表示 24 } 25 } 26}
PHP
1//list.php 登録されたデータを一覧にして表示したり、検索されたワードに該当するデータを表示するファイル 2 3require_once "DBconnect.php"; //データベース接続 4 $pdo = new DbCnct(); 5 // $pdo->dbConnect(); 6 7 //search.htmlでデータを検索された場合 8 try { 9 if(isset($_POST['search_key']) != "") { //search_keyの中身が空文字ではなかったら 10 $search_key = '%' .$_POST['search_key']. '%'; //中間一致検索 11 $sql = "SELECT * FROM users WHERE first_name like :first_name OR last_name like :last_name"; 12 $stmh = $pdo->prepare($sql); //ここでエラーが発生 13 $stmh->bindValue(':first_name', $search_key, PDO::PARAM_STR); 14 $stmh->bindValue(':last_name', $search_key, PDO::PARAM_STR); 15 $stmh->execute(); 16 $count = $stmh->rowCount(); 17 print "検索結果は" .$count. "件です。<br>"; 18 //検索結果が見つからない場合 19 if($count < 1) { 20 print "検索結果は0件です。"; 21 } 22 } else { 23 $sql = "SELECT * FROM users WHERE 1"; 24 $stmh = $pdo->query($sql); 25 } 26 } catch (PDOException $Exception) { 27 print "エラー:" .$Exception->getMessage(); 28 }
試したこと
- DbCnctが未定義のメソッドと呼ばれているので、require_onceをrequireやincludeに変更
- DbCnctが未定義のメソッドと呼ばれているので、クラス呼び出しでスペルミスがないか確認
環境
- PHP7.4.2
- MYSQL
- macOS Catalina バージョン:10.15.4
以上です。
自分でも色々考えましたが、mysqlについての知見がまだ未熟なので、「これ以上自分でやっても仕方がない!」と思い質問させていただきました。
よろしければご教示よろしくお願いします!
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/19 11:20