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

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

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

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

PHP

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

Q&A

2回答

1046閲覧

PHP・SQL文を用いてのデータテーブルへのデータ挿入

moonli

総合スコア0

MySQL

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

PHP

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

0グッド

0クリップ

投稿2020/07/25 16:02

前提・実現したいこと

PHPとMySQLを使用してPHPMyAdmin内のデータテーブルにデータを新しく挿入し、データテーブルの中にあるデータの一覧を表示させたいです。
具体的には、別のページで入力された名前と学籍番号、学部、血液型のデータをすでに作ってあるデータテーブルに挿入を目指しています。
しかし、どれだけ打ち間違いを直してもこのエラーが解消できません。
お手数をおかけしますが、ご返答のほどよろしくお願いいたします。

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

エラーメッセージ Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1','3')' at line 1 in \public_html\web\reg_gakusei_meibo.php:9 Stack trace: #0 \public_html\web\reg_gakusei_meibo.php(9): PDO->query('insert into public...') #1 \public_html\web\ex4-2reg.php(70): include('\\\public_html\web...') #2 {main} thrown in \public_html\web\reg_gakusei_meibo.php on line 9

該当のソースコード

ex4-2reg.php

php

1<!doctype html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<link rel="stylesheet" href="ex4-2.css"> 6<title>ex4 データ登録</title> 7</head> 8 9<center> 10<body bgcolor="DDC450"> 11<h1>ex4 データ登録</h1> 12 13<?php 14 $r_shimei = htmlspecialchars($_POST["c_shimei"]); 15 print "氏名:".$r_shimei."<br><br>"; 16 17 $r_gakuseki = htmlspecialchars($_POST["c_gakuseki"],ENT_QUOTES,"UTF-8"); 18print "学籍番号:" . $r_gakuseki . "<br><br>"; 19#~省略//データの数字によって何を表示するかの分岐~ 20include "reg_gakusei_meibo.php"; 21 print "<br>データ登録完了!<br><br>"; 22 ?> 23 <form method = "post" action = "ex4-2datainput.php"> 24 <input class="clear" type = "submit" value = "入力"> 25 </form> 26<br><br> 27 28</body></center> 29 30</html> 31

####reg_gakusei_meibo.php

php

1<? 2include("mysql_access.php"); 3$db_name = "#ユーザー名"; 4$db_pass = "#パスワード"; 5$tbl_name = "gakusei_meibo"; 6$con = db_connect($db_name,$db_pass); 7$q = "insert into $db_name.$tbl_name(name,no,gakubu,blood)value('$r_shimei','$r_gakuseki,'$r_gakubu','$r_blood') 8 "; 9$result = $con->query($q); 10print "SQL文:".$q."<br>"; 11print ("登録したデータは以下の通りです.<br>"); 12$q = "select * from $tbl_name"; 13datalist_display($result); 14$con = null; 15?>
myspl_access.php

php

1<?php 2//======================== 3// PDO update:2018a 4//======================== 5 6 7//ー------------------ (1) ------------------------- 8function db_connect($db_name, $db_pass){ 9 10 $db_type = "mysql"; 11 12 $db_host = "localhost"; 13 $db_user = $db_name; 14 15 16 // 文字化け対策 17 $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'"); 18 19 // PHPのエラーを表示するように設定 20 error_reporting(E_ALL & ~E_NOTICE); 21 22 // データベースの接続 23 $dsn = $db_type . ':host=' . $db_host . ';dbname=' . $db_name . ';charset=utf8'; 24 // print ($dsn); 25 try { 26 $dbh = new PDO($dsn, $db_user , $db_pass, [ 27 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 28 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 29 30 ]); 31// print("DB接続成功!"); 32 } catch (PDOException $e) { 33// print ("DB接続エラー ") ; 34 exit($e->getMessage()); 35 } 36 return $dbh; 37} 38 39 40//ー------------------ (2) ------------------------- 41function datalist_display($result){ 42 43 $dat_cnt = $result->rowCount(); 44 $col_cnt = $result->columnCount(); 45 46 print "データの個数 : " . $dat_cnt . "<br>"; 47 48 print "<table border=1>"; 49 50 // fields 51 52 print "<tr>"; 53 for ($i=0; $i < $col_cnt ;$i++){ 54 $col_name =$result->getColumnMeta($i)['name']; 55 print "<th>$col_name</th>"; 56 } 57 print "</tr>"; 58 59 // data 60 while ($row = $result->fetch(PDO::FETCH_ASSOC)) 61 { 62 print "<tr>"; 63 foreach ($row as $val) 64 { 65 print "<td>$val</td>"; 66 } 67 print "</tr>"; 68 } 69 print "</table>"; 70 71} 72 73?>

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

OS:Windows10
作成ツール:AdobeDreamweaver CC 18.2
サーバのバージョン: 8.0.18 - MySQL Community Server - GPL

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

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

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

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

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

m.ts10806

2020/07/25 20:45

phpMyAdminはあくまでMySQL(またはMariaDB)を操作するツールであってDBそのものではありません。
guest

回答2

0

ひとまずこの部分は修正がいると思います。

diff

1 2-'$r_gakuseki 3'$r_gakuseki' 4

投稿2020/07/25 16:37

hayato7

総合スコア1135

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

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

0

確かに変数はダブルクォーテーション内で展開できますが、何もなくそのまま突っ込むと前後の文字列によって意図通りに展開されない、認識されないこともあるのでそれぞれ{}で囲う癖はつけたほうが良いです。それで気づける文法上(今回はSQL)のミスもあるでしょう。

ただ、変数そのまま突っ込んでいたり、画面出力しない値に対してhtmlspecialcharsをかけていたり、
DBに変更かける処理なのにトランザクション張ってなかったり、
DBに対する処理を画面出力の後に書いていたり、
非常にまずい実装のオンパレードなので、全体的に修正すべきですね。

投稿2020/07/25 20:52

m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問