質問: アカウント情報をpdoでデータベースに入れようとしているのですが、insert intoが動きません。
回答: >1ページに3回postしています。 3回とはどういう意味でしょうか?ページからsubmitできるのは(ajaxでも使っていない限り)1回だけです。その1回で「3つのデータ」を送信しているという意味ならわかりますが・・・ >userはとりあえずなしで大丈夫です。 なしで大丈夫とは?この記述より前で定義済みということですかね(でないとエラーもしく警告が出ると思うので)。 閑話休題 以下は【とーっても大事な部分】なのですが・・・ PDOのエラーモードの初期値はPDO::ERRMODE_SILENTです。インスタンスの生成時だけは無条件に例外を生成しますが、それ以降はエラーモードに従います。 接続時(または接続直後に)エラーモードをPDO::ERRMODE_EXCEPTIONにして、エラーを例外として捕捉するようにしてください)。 POSTされた内容をエスケープも何もせずにDBに登録するのはアウトです。SQL文にパラメータを埋めておいて prepare / execute を使うのが最適解です。 生のパスワードをDBに格納するのもアウトです。password_hash() で求めたハッシュ値を使うなどしてください。 #チェックするときはpassword_verifyを使います。 (例) $user = // 何かわからないけど定義済みなんですよね? $pass = filter_input(INPUT_POST, 'pass'); $email = filter_input(INPUT_POST, 'email'); try { $pdo = new PDO("mysql:host=localhost;dbname=hoge;charset=utf8mb4", 'hoge','hoge', [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]); $stmt = $pdo->prepare("insert into login (mail, pass, user) values (?, ?, ?)"); $stmt->execute([$mail, password_hash($pass), $user]); } catch (PDOException $e) { die('database error : ' . $e->getMessage()); }