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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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回答

1060閲覧

PHPでSQLに接続する処理を書くと真っ白な画面が出てしまいます。原因と解決策をご教示頂きたく存じます。

tomoko100

総合スコア4

SQL

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

PHP

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

0グッド

1クリップ

投稿2021/04/27 14:34

前提・実現したいこと

プログラミングの初心者です。初歩的な質問だと思いますが、失礼します。
現在、phpでsqlにデータを記述する処理を書こうとしているのですが、
参考書の通りに記述しているにも関わらず、サーバーにアップして
見てみても、真っ白な画面が出るだけで、何も表示されません。
エラーメッセージなども一切表示されておりません。
どのようなことが原因が考えられるでしょうか。また、その解決策も
ぜひ併せてご教示頂きたく存じます。

ソースコード <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>SNS2</title> </head> <body> <?php $my_nam=htmlspecialchars($_POST["n"], ENT_QUOTES); $my_mes=htmlspecialchars($_POST["m"], ENT_QUOTES); $db = new PDO("mysql:host=localhost;dbname=db","root","root"); $db->query("INSERT INTO tb (ban,nam,mes,dat) VALUES (NULL,'$my_nam','$my_mes',NOW())"); print "書き込みに成功!"; print "<p><a href='******.php'>一覧表示へ</a></p>"; ?> </body> </html>

試したこと

● 参考書のコードをそのままサーバーに挙げて表示してみました。
(同じく何も表示されませんでした。)
● $dbの始まる文を消してみる。(「書き込み成功!」などが表示される)
● $db
の文を書く(なにも表示されない)

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

使用サーバー:さくらインターネット
ここにより詳細な情報を記載してください。

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

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

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

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

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

FKM

2021/04/27 15:39 編集

真っ白な画面が出ているということは、エラーを表示させていない可能性が極めて高いですね。 先頭にini_set("display_errors",1); と記述してエラーを表示させてください。 そこから色々問題が見えてくるはずです。
javahack

2021/04/27 16:21

エラーとは全く関係ありませんが、htmlspecialchars()は画面表示する際に使用すべき関数で、DBに保存する文字列に使用してはいけません。
m.ts10806

2021/04/27 21:37

サーバーのエラーログ確認してください。 提示された情報だけだと他者が的確なアドバイスできるほどの内容ではないです。
guest

回答1

0

ベストアンサー

さくらのレンタルサーバーだと、
データベース用に別のホストが与えられるはず。
当然、データベース名も。
ユーザーidはサーバーのアカウントと同じ。
パスワードはデータベース開設時に自分で入力するはず。

コントロールパネルからデータベースの情報を調べて、
接続用文字列のlocalhostなどの設定を見直ししてください。


php

1$db->query("INSERT INTO tb (ban,nam,mes,dat) 2 VALUES (NULL,'$my_nam','$my_mes',NOW())");

php

1$stmt = $db->prepare("INSERT INTO tb (ban, nam, mes, dat) 2 VALUES (NULL, :my_nam, :my_mes, NOW())"); 3$stmt->bindValue(':my_nam', $my_nam, PDO::PARAM_STR); 4$stmt->bindValue(':my_mes', $my_mes, PDO::PARAM_STR); 5$stmt->execute();

とかですかね。
SQL文字列に、外部からくるデータを直接展開するのは止めましょう。
PDO::prepare
PDOStatement::bindValue

あと、他の方の指摘にもあるように、データベース処理などする際には、
htmlspecialchars()の加工はしません。
HTML表示直前に加工して、変数の中身を書き換えることはしないほうが無難です。
PHP で h() を書くなら一緒に echo しよう。 - こせきの技術日記
いわゆるh関数を使いましょうよと。

投稿2021/04/27 19:48

編集2021/04/28 00:12
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tomoko100

2021/04/27 23:13

ご回答くださいましてありがとうございます。 さっそくアドバイスの通りに見てみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問