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

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

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

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

Q&A

解決済

4回答

16893閲覧

PHPからデータベースに接続できない

ShimoK

総合スコア13

PHP

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

0グッド

0クリップ

投稿2018/03/01 00:35

「いちばんやさしいPHPの教本」という教材を使ってPHPの学習をしているのですがデータベースに接続してデータベースの中身を確認するという所でエラーが出てしまいます。
教本通りに打ち込んでみましたがエラーの箇所がわからず先の内容に進めないというのが今の現状です。どなたかエラーの場所をご指摘していただければ幸いです。よろしくお願いします。```PHP
コード

$user = "shimo"; $pass = "musou0525"; $dbh = new PDO('mysql:host=localhost;dbname=db2;charset=utf8', $user, $pass); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $spl = "SELECT * FROM recipes"; $stmt = $dbh->query($sql); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); print_r($result); $dbh = null; ?> _______________________________________ エラー内容 Notice: Undefined variable: sql in C:\xampp\htdocs\yasashiiphp\list.php on line 7 Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty in C:\xampp\htdocs\yasashiiphp\list.php:7 Stack trace: #0 C:\xampp\htdocs\yasashiiphp\list.php(7): PDO->query('') #1 {main} thrown in C:\xampp\htdocs\yasashiiphp\list.php on line 7

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

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

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

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

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

kei344

2018/03/01 01:42

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

回答4

0

ベストアンサー

$spl = "SELECT * FROM recipes";

$splという変数を定義しておきながら

$stmt = $dbh->query($sql);

$sqlという変数を利用しているからです。pとqの打ち間違いですね。

本来の意味からすると$sqlの方が正しい(えすきゅーえる)ので、

php

1$sql = "SELECT * FROM recipes"; 2

とすべきでしょう。

また、エラーの意味は

Notice: Undefined variable: sql in C:\xampp\htdocs\yasashiiphp\list.php on line 7

→ list.phpの7行目にあるsqlという変数は未定義です。(Noticeレベルエラー)

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty in ~~~

→ list.phpの7行目のpdoにてクエリ(データベースへの問い合わせ文)が空の状態で送られました

という意味です。
英語に不安であればGoogle翻訳にかけるとそこそこ分かりやすい日本語にしてくれるのでおすすめです。
またエラーメッセージをほぼそのままGoogle検索にかけると大体は解決につながる記事が出てきますので、次回からはぜひ、やってみてください。
特に「Undefined variable~~」の「未定義エラー」は最初の内はよく起きるやつです。
何も定義をしていない変数を使おうとすると出るエラーです。

※実際に実行しようとしているSQLが正しいかどうか、対象のテーブルがデータベースに存在するかは質問者さんの環境次第です。

投稿2018/03/01 00:46

m.ts10806

総合スコア80765

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

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

ShimoK

2018/03/01 12:41

恥ずかしながら本当にスペルミスでした。何度も教科書を見直しても「p」と「q」を見抜けなかったのには注意力が低いと実感しました。指摘してくださって本当にありがとうございました!
guest

0

ソースが転記ミスでないとしたら

Notice: Undefined variable: sql in C:\xampp\htdocs\yasashiiphp\list.php on line 7

というエラーメッセージの通り、7行目で定義されていない$sqlという変数を使用しているからです。

具体的に言うとその前のところで、

PHP

1$spl = "SELECT * FROM recipes"; 2

と「$spl」と定義しているのに、

PHP

1$stmt = $dbh->query($sql);

と「$spl」でない「$sql」を使用しているからです。

投稿2018/03/01 00:46

KoichiSugiyama

総合スコア3041

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

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

0

$spl = "SELECT * FROM recipes"; $stmt = $dbh->query($sql);

$spl$sqlで変数名が違っています。

投稿2018/03/01 00:43

maisumakun

総合スコア145121

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

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

0

データベースに接続できない、のではなく、
(接続できているにも関わらず)変数名のタイプミス($sql→$spl)のために変数に格納したSELECT文を実行できない、
が正しい捉え方かもしれません。

・・・と、指摘は他の回答者さんと同じですが、
目視でタイプミスを発見できないようであれば、
タイプミスの指摘をしてくれるプログラミング向けエディターや統合開発環境の導入をおすすめします。
「php 開発環境 フリー」などでネット検索すれば紹介記事が多数見つかります。

投稿2018/03/01 03:13

編集2018/03/01 03:20
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問