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

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

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

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

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PDO

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

受付中

Mysqlでexecuteがfalseを返し、INSERTできません。

fufufu0101
fufufu0101

総合スコア4

MySQL

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

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PDO

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

1回答

0リアクション

0クリップ

276閲覧

投稿2022/08/25 02:17

編集2022/08/29 00:27

前提

ユーザー登録システムを作っていますが、どうしても
INSERTできず、「登録に失敗しました。」となってしまいます。

①signup.phpで名前・フリガナ・ID・パスワード・パスワード確認を入力し送信
②register.phpに送信したデータがpostされる。
③register.phpでクラスUserLogicのcreateUserを呼び出す。(引数は$_POSTで)す。

一連の流れで渡されるデータやarrの中身を出しました結果、入力した通りのデータが入っていました。

どこが悪いのかも検討もつかなくなり、行き詰っています。
どうか、ご教授ください。

実現したいこと

ユーザー登録機能を動作するようにする

発生している問題

falseを返し、INSERTできない。

該当のソースコード

php

// signup.php <h3>新規メンバー登録フォーム</h3> <form action="register.php" method="post" id="f1" autocomplete="off"> <p> <label for="membersname">氏名:</label> <input type="text" name="membersname" id="membersname" required> </p> <p> <label for="furigana">ふりがな:</label> <input type="text" name="furigana" id="furigana" required> </p> <p> <label for="logid">ID:</label> <input type="text" name="logid" id="logid" required> </p> <p> <label for="logpass">パスワード:</label> <input type="password" name="logpass" id="logpass" required> </p> <p> <label for="password_conf">パスワード確認:</label> <input type="password" name="password_conf" id="password_conf" required> </p> <p> <input type="submit" value="新規登録"> </p> </form>

php

// register.php // ユーザーを登録する処理 $hasCreated = UserLogic::createUser($_POST); if($hasCreated == false){ $err[] = "登録に失敗しました。"; }else{ // 登録成功 echo "登録成功"; echo $_POST['membersname'] . "(". $_POST['furigana'] .")" . "さんのデータを登録しました!"; }

php

// UserLogic.php class UserLogic { /** * ユーザーを登録する * @param array $userDate * @return bool $result */ public static function createUser($userData) { $membersname = $_POST['membersname']; $furigana = $_POST['furigana']; $logid = $_POST['logid']; $logpass = $_POST['logpass']; $result = false; $sql = 'INSERT INTO member(membersname, furigana, logid, logpass) VALUES (?, ?, ?, ?)'; // ユーザーデータを配列に入れて渡す $arr = []; $arr[] = $userData['membersname']; $arr[] = $userData['furigana']; $arr[] = $userData['logid']; //$arr[] = $userData['logpass']; $arr[] = password_hash($userData['logpass'], PASSWORD_DEFAULT); echo 'arrの中身を出します'; echo '<br>'; foreach( $arr as $ar){ echo $ar; echo '<br>'; } try{ $stmt = connect()->prepare($sql); $result = $stmt->execute($arr); return $result; }catch(\Exception $e){ return $result; } } }

試したこと

$sql = 'INSERT INTO member (membersname, furigana, logid, logpass) VALUES (:membersname, :furigana, :logid, :logpass)'; $sql->bindParam(':membersname', $membersname, PDO::PARAM_STR); $sql->bindParam(':furigana', $furigana, PDO::PARAM_STR); $sql->bindParam(':logid', $logid, PDO::PARAM_STR); $sql->bindParam(':logpass', $logpass, PDO::PARAM_STR);

などと、記載を変えてみたりしましたが上手くいきません。
DB接続は成功しています。

補足情報(FW/ツールのバージョンなど)

テーブル
イメージ説明

php

INSER文のある、UserLogic.phpで、dbconnect.phpをrequire_onceしています。 (dbconnect.php) 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 ]); //$stmt = $pdo->query('DB_NAME'); return $pdo; //echo '接続成功です!!'; } catch(PDOExeption $e){ echo '接続失敗です!'. $e->getMessage(); exit(); } } // echo connect();

catchで
PDOExceptionをつかめばエラーの詳細がわかると思います。

Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in
とエラーで表示されました!これから詳しく見てみます。

【8/29 追記】
$stmt = $pdo->query('ここにDB名を入れました');をdbconnect.phpに記述し、実行したところ、
Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
というエラーが起きました。
バージョン:MariaDB10.5
サーバー:エックスサーバー
これからまたしばらく試行錯誤してみます。

php

(dbconnect.php) <?php ini_set('display_errors', true); 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 ]); $stmt = $pdo->query('ここにDB名を直書きしました'); return $pdo; //echo '接続成功です!!'; var_dump($db); } catch(PDOExeption $e){ echo '接続失敗です!'. $e->getMessage(); exit(); } } //echo connect(); ?>

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

fufufu0101

2022/08/25 02:36 編集

【追記】 INSER文のある、UserLogic.phpで、dbconnect.phpをrequire_onceしています。 (dbconnect.php) 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 ]); return $pdo; //echo '接続成功です!!'; } catch(PDOExeption $e){ echo '接続失敗です!'. $e->getMessage(); exit(); } }
AbeTakashi

2022/08/25 02:41

質問文はあとでも編集できるので、そちらに追記した方が良いですよ。ここは見ない人もいるし、コードも整形されません。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

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

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PDO

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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