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

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

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

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

PDO

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

phpMyAdmin

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

PHP

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

Q&A

解決済

1回答

1006閲覧

プレースホルダー使用時、2031 No data supplied for parameters in prepared statementエラーが出ます

syumai6842

総合スコア12

MySQL

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

PDO

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

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2022/04/04 15:41

編集2022/04/05 16:02

PHPで、mysqlを使ってログイン処理を作ろうとすると、以下のようなエラーが出ます。

2031 No data supplied for parameters in prepared statement

PHPのバージョンは8.0.13です。

初心者で何を言えばいいかわからずすみません。
何か必要な情報があればお手数ですが教えてください。

コードは以下のものです。

dbc.php

1<?php 2 3 4 5 6$dsn = "mysql:host=localhost;dbname=test;charset=utf8;"; 7 8$user = "syumai6842"; 9 10$pass = "kana@7531"; 11 12try { 13 $dbh = new PDO($dsn, $user, $pass, [ 14 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 15 PDO::ATTR_EMULATE_PREPARES => false, 16 ]); 17} catch (PDOException $e) { 18 echo '接続失敗', $e->getMessage(); 19 exit(); 20}; 21 22?>

createaccountpage

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <link rel="styleshhet" href="../css/default.css"> 9 <style type="text/css"> 10 @import url("../css/header.css"); 11 @import url("../css/default.css"); 12 </style> 13</head> 14<body> 15<div style="margin: auto;width:30rem;margin-top:5rem; border:2px solid gainsboro;"> 16 <p style="text-align:center; font-size: 50px;font-weight:bolder;">アカウント作成</p> 17 18 <form method="post" style="margin: auto; text-align:center;"> 19 <p>アカウント名</p> 20 <input type="text" name="maname" value="" size="20rem"> 21 <br> 22 <br> 23 <p>パスワード</p> 24 <input type="password" name="mapass" value="" size="20rem"> 25 <br> 26 <br> 27 <br> 28 <input type="submit" name="mabtn" value="作成" style="width:5rem;height:2rem;"> 29 <br> 30 <?php 31 if(isset($_POST["mabtn"])){ 32 require_once("./createaccountlogic.php"); 33 } 34 ?> 35 <br> 36 <br> 37 <a href="./home.php">アカウントログイン</a> 38 <br> 39 <br> 40 </form> 41 </div> 42</body> 43</html>

createaccountlogic.php

1<?php 2 try { 3 $name = "aaaaa"; 4 $name = $_POST["maname"]; 5 $pass = hash("sha256", $_POST["mapass"]); 6 require_once("./dbc.php"); 7 8 $sth = $dbh -> prepare("SELECT name, COUNT(*) FROM accounts WHERE name = :name GROUP BY name;"); 9 $sth -> bindValue(':name', $name, PDO::PARAM_STR); 10 echo $name; 11 12 $isused = $sth -> execute(); 13 14 echo $isused; 15 16 17 18 switch ($isused) { 19 case 1: 20 echo"<script type=\"text/javascript\">alert(\"アカウントを作成します!!\");</script>"; 21 $sql = "INSERT INTO `accounts` (`id`, `name`, `pass`) VALUES (NULL, :name, :pass );"; 22 $sth = $dbh -> prepare($sql); 23 $sth -> bindValue(':name',$name,PDO::PARAM_STR); 24 $sth -> bindValue(':pass',$pass,PDO::PARAM_STR); 25 $dbh->query($sql, 2); 26 header("Location:./home.php"); 27 $sql = null; 28 # code... 29 break; 30 31 default: 32 echo"<script type=\"text/javascript\">alert(\"既に使用されています!!\");</script>"; 33 # code... 34 break; 35 } 36 37 } catch (PDOException $e) { 38 print"エラーが発生しました。".$e -> getMessage(); 39 exit(); 40 } 41?> 42

どうかよろしくお願いします。

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

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

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

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

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

yambejp

2022/04/05 01:20 編集

「mysqli」タグをはずして「pdo」を追加してください エラーが出ているのは具体的にどの行かわりますか?
syumai6842

2022/04/05 06:16 編集

すみません... タグ変えておきます... エラーに関しては解答して頂いた物で解決出来ました!! ありがとうございます!!
guest

回答1

0

ベストアンサー

insertの箇所のprepare処理が、prepareで指定しているのにexecuteせずにqueryしていませんか?

投稿2022/04/05 04:22

yambejp

総合スコア114585

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

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

syumai6842

2022/04/05 06:10

$dbh->query($sql,2); の所ですね!! すみません...見落としていました... さっき $sth -> execute(); に変更したらうまくアカウントが作成出来ました!!! ありがとうございます!!! それとすみません、もう一つお聞きしてよろしいでしょうか... creteaccountlogic.phpの12行目にある $isused = $sth -> execute(); で$isusedに入力されたアカウント名の値が何回使われているかを知りたいんですけど、 何故か毎回1が帰ってくるんですよね... プレースホルダーの問題かと思ってましたが、sql文が間違ってたりするんでしょうか?
yambejp

2022/04/05 06:17

COUNT(*)に別名をつけて COUNT(*) as cnt $rows=$sth->fetchAll(PDO::FETCH_ASSOC); としておいて print_r($rows) で確認してみてください
syumai6842

2022/04/05 07:02

いろいろ試してみて、 print_r($rows[0]['cnt']); で見事に使用数が表示されました!!! asがなかなか理解できずにいましたが、それも理解できました!! 本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問