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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

2069閲覧

PHPからデータベースに接続する際のエラーについて

atom_0407

総合スコア13

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2017/12/12 08:50

編集2017/12/13 01:29

PHP学習中の初心者です。
c9で開発しています。

下記を実行するとParse error: syntax error, unexpected 'staff_list' (T_STRING)になってしまいます。
ご教示いただけると幸いです。

try { $name =$_POST['name']; $Inc =$_POST['Inc']; $name =htmlspecialchars($name); $Inc =htmlspecialchars($Inc); $dsn='mysql:dbname=fxa;host=localhost'; $user='root'; $password=''; $dsh = new PDO($dsn,$user,$password); $dsh->query('SET NAMES utf8'); $sql='INSERT INTO mst_name(name,password) VALUES (?,?)'; $stmt=$dbh->prepare($sql); $data = $name; $data = $Inc; $stmt->execute($date); $dbh =null; echo $name; echo '登録しました。'; }catch(Exception $e){ echo '障害発生中'; exit(); } ?> <a href="staff_list.php">戻る </a> </body> </html>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/12/12 10:21

これがphpソースの全文ですか? Parse errorであれば、行番号も示されるはずなので、その前後を重点的に点検してみてはいかがでしょうか。
kei344

2017/12/12 10:45

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答1

0

ベストアンサー

Parse errorが示す行番号付近を点検するのが最優先。
「”」や「'」など全角文字が紛れ込んでいないかをチェックしたけど、
掲載箇所には見つけられず。

本筋と違う、その他気づいた点としては、

1)PDO接続するところでエンコーディングの指定charsetにすると吉。
さらに、optionsも与えて接続時にもう例外キャッチできるようにすると大吉。

php

1$dsn = 'mysql:dbname=fxa;host=localhost;charset=utf8mb4'; 2$user = 'root'; 3$password = ''; 4$dsh = new PDO($dsn, $user, $password, [ 5 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 6 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 7]);

こうすると、$dsh->query('SET NAMES utf8'); は不要。
PHPでデータベースに接続するときのまとめ - Qiita

2)htmlspecialchars()でPOST受信したパラメータを加工したものを
データベースにINSERTしようとしているけど、
htmlspecialchars()ってhtml表示すると差し支える文字(&や’や”など)をエスケープするための関数なので、
データベース保存用には使わなくていいんじゃないだろうか。
関数の目的な使い方をリファレンス上で確認を。PHP: htmlspecialchars - Manual
むしろ、nameやInc用の文字として不適切な文字が含まれていないかをチェックする処理を加えて欲しい。
わかりやすい話として、ひとまず下記の記事。
php:phpで正規表現を使った英数字チェック | raining
SQLインジェクション対策(PHP) - Qiita

3)prepare()後のexecute()するあたりの流れもちょっと変。

php

1$data = [$name, $Inc];

などと配列にしてexecute()に与えないと。

4)$dbh =null;する前に$stmt=null;があるとお行儀がいい。
下記ページの例3を参照。
PHP: 接続、および接続の管理 - Manual

投稿2017/12/12 10:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

atom_0407

2017/12/13 03:06

動きました!! 詳しいご説明ありがとうございます。勉強になります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問