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

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

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

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

SQL

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

PHP

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

Q&A

解決済

3回答

13217閲覧

phpMyadminで「返り値が空でした (行数 0)」が表示される問題の解決についての質問

YousukeTanaka

総合スコア79

phpMyAdmin

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

SQL

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

PHP

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

0グッド

2クリップ

投稿2015/11/27 03:00

お世話になります。

現在、phpを使って、ショッピングカートを制作しております。
今回、ラウザ上でコードが機能しているにもかかわらず、
データベースにデータが蓄積されていないという現象が起きました。

具体的な問題として、「返り値が空でした (行数 0)」という表示がされます。
(下記参照)
イメージ説明

調べたところ、ブラウザ履歴をクリアで解決する方法があり、試しましたが、
結果は変わりませんでした。

コードは、以下のように記載しています。

<?php try { $pro_name= $_POST['name']; $pro_price= $_POST['price']; $pro_gazou_name= $_POST['gazou_name']; $pro_name=htmlspecialchars($pro_name); $pro_price=htmlspecialchars($pro_price); $dsn='mysql:dbname=shop;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql='INSERT INTO mst_product(name,price,gazou) VALUES(?,?,?)'; $stmt=$dbh->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[]=$pro_gazou_name; $stmt->execute($data); $dbh=null; print $pro_name; print 'を追加しました。<br/>'; } catch(Exception $e) { print'ただ今障害により大変ご迷惑をお掛けしております。'; exit(); } ?>

誤りの原因と解決のヒント、ご助言をお願いしたい次第です。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

すでに回答にあるエラー関連の設定もそうですが、
PDOは初期状態ではコンストラクタが呼ばれた時点のエラーしか出ないようになっています。
エラーハンドリングの対応が必要になります。
http://php.net/manual/ja/pdo.error-handling.php
ここに書かれています。
エラーハンドリングを試してみてください。

投稿2015/11/27 04:14

TaMaMhyu

総合スコア1356

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

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

YousukeTanaka

2015/11/27 04:50

ご助言ありがとうございます。エラーハンドリングを試しました。すると、Warningのメッセージが表示されるようになりました。 「Warning: PDOStatement::execute(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gazou' in 'field list' in /home/ubuntu/workspace/product/pro_add_done.php on line 69 Call Stack: 0.0008 229680 1. {main}() /home/ubuntu/workspace/product/pro_add_done.php:0 0.0015 240672 2. PDOStatement->execute() /home/ubuntu/workspace/product/pro_add_done.php:69 アスパラガスを追加しました。」 ここからどのように問題の原因を探っていけばよいのでしょうか? お手数をおかけしますが、何卒よろしくお願いいたします。
TaMaMhyu

2015/11/27 05:19

データベースサーバーのエラーが出ています。 `gazou`と言うカラムはないと言っています。 テーブル定義を確認してください。
KiyoshiMotoki

2015/11/27 05:31

TaMaMhyu様、ご指摘ありがとうございます おっしゃる通り、PDO側のエラーハンドリングも設定してやる必要がありましたね。 上記の通り、私の回答を修正させていただきました。
YousukeTanaka

2015/11/27 06:22

TaMaMhyu様、KiyoshiMotoki様、 これまでのご助言、ありがとうございました。Warningの理解の仕方がわかったような気がします。今までは、lineのどこが間違っているのかは分かっていましたが、特定の仕方までは分かりませんでした。大変参考になりました。また、カラムを確認し、表示の文字が誤っていたことを発見しまし、修正したところ、機能するようになりました。かなりの時間をここに割いていたため、大変感謝しております。m
guest

0

コードの先頭に以下の2行を追加して、もう一度試してみて下さい。

php

1<?php 2error_reporting(E_ALL & ~E_STRICT); 3ini_set('display_errors', '1');

http://php.net/manual/ja/function.error-reporting.php
http://php.net/manual/ja/errorfunc.configuration.php#ini.display-errors

上に加えて、TaMaMhyu様の回答の通り、PDOのエラーハンドリング設定も加えて下さい。

php

1$dbh=new PDO($dsn, $user, $password); 2$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); // この1行を追加 3$dbh->query('SET NAMES utf8'); 4 5...

投稿2015/11/27 03:37

編集2015/11/27 05:31
KiyoshiMotoki

総合スコア4791

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

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

YousukeTanaka

2015/11/27 04:52

ご助言ありがとうございます。<?php の後にご指摘のコードを設置しました。エラーの理由を確認いたします。
TaMaMhyu

2015/11/27 06:45

例外処理がすでにあるので、`PDO::ERRMODE_EXCEPTION`の方がすっきりするかと思います。 ただ、今のままでは例外の内容がどこにも出力されないので、`$e->getMessage()`をどこかに出力すると良いかと思います。
KiyoshiMotoki

2015/11/27 07:17

TaMaMhyu様 おっしゃる通り、例外を投げる形でもエラーの確認はできますね。 しかし、今回はデバッグが目的でしたので、 「既存のコードの動きをできるだけ変えない」 ようにするため、"PDO::ERRMODE_WARNING"を提案させていただきました。
guest

0

PHP

1$data = array($pro_name, $pro_price, $pro_gazou_name);

もしくはPHPが5.4以上なら

PHP

1$data = [$pro_name, $pro_price, $pro_gazou_name];

としてみてはいかがでしょうか?

投稿2015/11/27 03:18

orange0190

総合スコア1698

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

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

YousukeTanaka

2015/11/27 03:29

申し訳ありません。試してみましたが、データの表示はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問