質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1619閲覧

データベースにユーザの新規登録ができない

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/04/12 14:53

編集2021/04/12 14:58

前提・実現したいこと

ユーザの新規登録を実装したい

PHPで自作アプリを作成しています。
そこで、ユーザの新規登録を実装したいのですが、エラーが出て行き詰まっています。

発生している問題・エラーメッセージ

Fatal error: Uncaught Error: Call to a member function prepare() on null in /Applications/MAMP/htdocs/アプリ名/Models/Company.php:17 Stack trace: #0 /Applications/MAMP/htdocs/アプリ名ス/Views/Companies/register/signup_form.php(48): Company::createCompany('\xE6\xA0\xAA\xE5\xBC\x8F\xE4\xBC\x9A\xE7\xA4\xBE\xE3\x83\xA9...') #1 /Applications/MAMP/htdocs/アプリ名/public/index.php(8): require_once('/Applications/M...') #2 {main} thrown in /Applications/MAMP/htdocs/アプリ名/Models/Company.php on line 17

該当のソースコード

データベース接続(Db.php)

<?php require_once(ROOT_PATH .'/env.php'); ini_set('display_errors', "On"); // 接続チェックOK function connect() { $host = DB_HOST; $db = DB_NAME; $user = DB_USER; $pass = DB_PASS; $dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4"; try { $pdo = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); } catch(PDOException $e) { echo "接続失敗です!". $e->getMessage(); exit(); } }

ユーザーの登録ロジック(Company.php)

<?php require_once(ROOT_PATH .'/Models/Db.php'); class Company { /** * ユーザの登録 * @param array $userDate * @return bool $result */ public static function createCompany($company_name) { $result = false; $sql = 'INSERT INTO companies (company_name) VALUES (:company_name)'; try { $stmt = connect()->prepare($sql);←エラーで指摘されている17行目 $stmt->bindValue(':company_name', $company_name, PDO::PARAM_STR); $result = $stmt->execute(); return $result; } catch(\Exception $e) { return $result; } } }

signup_form.php(新規登録画面)

会社新規登録画面 <a href="register.php">新規登録完了</a> <?php require_once(ROOT_PATH .'/Models/Company.php'); ini_set('display_errors', "On"); $err = []; if($_SERVER['REQUEST_METHOD'] === 'POST'){ $company_name = filter_input(INPUT_POST, 'company_name'); $company_url = filter_input(INPUT_POST, 'company_url'); $company_tel = filter_input(INPUT_POST, 'company_tel'); $company_postal = filter_input(INPUT_POST, 'company_postal'); $company_adress = filter_input(INPUT_POST, 'company_adress'); $company_email = filter_input(INPUT_POST, 'company_email'); $company_pass = filter_input(INPUT_POST, 'company_pass'); $company_passconf = filter_input(INPUT_POST, 'company_passconf'); if(empty($company_name)) { $err[] = "会社名は必須です。"; } // if(empty($company_url)) { // $err[] = "会社のURLは必須です"; // } // if(empty($company_tel) || !preg_match("/^[0-9]+$/", $company_tel)) { // $err[] = "会社の電話番号は必須です。また半角数字で入力してください。"; // } // if(empty($company_postal) || !preg_match("/^[0-9]+$/", $company_postal)) { // $err[] = "会社の郵便番号は必須です。また半角数字で入力してください。"; // } // if(empty($company_adress)) { // $err[] = "会社の住所は必須です"; // } // if(empty($company_email) || !filter_var($company_email, FILTER_VALIDATE_EMAIL)) { // $err[] = "メールアドレスは必須です。また正しいメールアドレスで入力してください。"; // } // if(!preg_match("/^(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,20}$/i", $company_pass)) { // $err[] = "パスワードは半角英数字8文字以上20文字以内で入力して下さい。"; // } // if($company_pass !== $company_passconf) { // $err[] = "パスワードが一致しません。もう一度確認してください。"; // } if(count($err) === 0) { // ユーザを登録する処理 $hasCreated = Company::createCompany($company_name); header('Location: ../register.php'); if(!$hasCreated) { $err[] = "登録に失敗しました!"; } } }

データベース
イメージ説明

試したこと

データベースの接続確認→OK
スペル確認→問題なさそう

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PHP

1 $pdo = new PDO($dsn, $user, $pass, [ 2 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 3 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 4 ]); 5 return $pdo; // 渡していないのでは?

投稿2021/04/12 15:00

kei344

総合スコア69606

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/12 15:06

ありがとうございます!本当に初歩的なミスでした。ご指摘の通り、渡していないせいでした!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問