DB接続やInsertでのエラーを画面に表示する方法

このQ&Aのポイント
  • PHP、MySQLにて、とあるデータを画面から入力しDBへInsertするようなサイトを構築しています。エラーメッセージを画面上に表示する方法についてご質問です。
  • データ型の不一致については、入力時に文字数や半角英数のチェックを行い、不一致が起こらないようにしています。
  • エラーコードを受け取り、それに基づいてメッセージを表示することでエラーメッセージを実現することができます。参考になりそうなサイトもありますので、ご紹介いたします。
回答を見る
  • ベストアンサー

DB接続やInsertでのエラーを画面に表示

PHP、MySQLにて、とあるデータを画面から入力しDBへInsertするようなサイトを構築しています。 正常に動作し、画面で入力した内容が作成したDBにしっかり登録されていることを確認できましたが、DB接続エラーやデータ型の不一致が生じた場合にそのエラーの内容をユーザにエラーメッセージとしてデザインされた画面上に表示させたいと思っています。 ちなみに、データ型の不一致については、不一致が起こらないように入力時(入力内容の確認画面の前)にて文字数、半角英数などのチェックはしてはじいています。 こういった場合はどのように作りこみをしていけば宜しいでしょうか。 何かエラーコードのようなものを受け取ることができれば、それを元にメッセージを用意するだけで実現できそうですが、考え方について教えて頂けますでしょうか。 どこか参考になりそうなサイト等もございましたら教えて頂けますでしょうか。 よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

PDOであればPDO::errorInfo、mysql_系であればmysql_errorで行けると思います。 http://www.php.net/manual/ja/pdo.errorinfo.php http://jp1.php.net/manual/ja/function.mysql-error.php

buttero
質問者

お礼

ありがとうございます。PDO、mysql_errorともに初めて見る内容で吸収できるまで時間がかかりそうですが、がんばって勉強します。ありがとうございました。

その他の回答 (2)

noname#244856
noname#244856
回答No.3

訂正 × if (!isset($_REQUEST['name']) || !is_string($id = $_REQUEST['name'])) { ○ if (!isset($_REQUEST['name']) || !is_string($name = $_REQUEST['name'])) {

noname#244856
noname#244856
回答No.2

PDOならばPDO::errorInfoで1回1回チェックせずとも、PDO::ERRMODE_EXCEPTIONにエラーモードを設定すれば全て例外としてスローしてくれるのでとっても処理がラクになります。 http://php.net/manual/ja/book.pdo.php http://www.phpbook.jp/tutorial/pdo/ http://takuya-1st.hatenablog.jp/entry/20110907/1315372181 http://stackoverflow.com/questions/4361459/php-pdo-charset-set-names http://www.tokumaru.org/d/20110322.html <?php try { if (!isset($_REQUEST['id']) || !is_string($id = $_REQUEST['id'])) { throw new Exception("invalid parameter 'id'"); } if (!isset($_REQUEST['name']) || !is_string($id = $_REQUEST['name'])) { throw new Exception("invalid parameter 'name'"); } $pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1;charset=utf8', 'user', 'password'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('INSERT INTO myTable (id, name) VALUES (?, ?)'); $stmt->execute(array($id, $name)); echo 'inserting done.'; } catch (Exception $e) { echo htmlspecialchars('error : ' . $e->getMessage(), ENT_QUOTES, 'UTF-8'); }

buttero
質問者

お礼

詳細なサンプル、ありがとうございます。また初級者なので、わからないことだらけですが、がんばって吸収しようと思います。勉強の大変貴重なヒントになりました。ありがとうございます。

関連するQ&A

  • mySQLでINSERT Errorとなります。

    初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • PHPMyAdminを使ってインサートすると・・。

    最近MySQL5.0.22を使い始めました。 PHPMyAdminを使って手入力でテーブルにデータをインサートしようとすると、#1292のエラーメッセージが出ます。 日付やINTのカラムにデータを入れずにインサートしようとするとこのエラーが出ます。 以前MySQL4.0を使っていた時にはこういった現象はなかったのですが、どのように回避すれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • insertでのエラーについて

    お世話になります。 アップロードしたバイナリデータを変数に入れて、それをinsertしているのですが、DBに入りません。 テーブルでは、data mediumblob not nullと設定しています。Perlスクリプト内で、次のように書いています。 $sql="insert into data_tbl(data)"; $sql.="values('" . $datafile . "')"; 上記の$datafileにバイナリデータが入っています。 このようにして実行しているのですが、You have an error in your SQL syntax. とエラーになりDBに格納できません。ご教授よろしくお願いします。

  • DBとMDB2接続

    DB接続していたものをMDB2接続に変更し、INSERTを行うとエラーが発生しています。 DB接続時はMySQL、MDB2接続ではsql Server を使用しています。 INT型でNULL禁止になっているところに値をNULL(もしくは空文字)で入れると(INSERT直前の値をvar_dumpするとSTRING(0) = > "" となっています)、DB接続の場合は0が登録されています。 文字列型の箇所には0ではなく、そのまま空文字として登録されています。 MDB2接続の場合は、下記のエラーが発生しています。 Error converting data type nvarchar to numeric ソースや使用していすシステムは都合により、掲載できないのですが、質問したいことは、 1、DB接続だと空文字を0に変換する機能になっている? 2、MySQLの使用で空文字を0に変換する?sql Serverだとならないのか。 もしMDB2接続で上記のエラーに対する対策方法があれば教えていただけますか? なお、一つ一つ変更するのが、簡単ですが、量が多いので極力避けたいと考えています。 よろしくお願いいたします。

  • ログイン画面作成

    ASP.NETの初心者ですが、ログイン画面の作成取り掛かっています。 しかし、プログラミングの部分まったく進みません。。 機能としては、 初回起動のときデータベースとの接続を行う。 接続成功の場合はログイン画面を表示する。 失敗の場合はエラーメッセージを表示する。 ログインボタン押下 ユーザID入力あり チェック:半角や桁数チェック(false) エラーメッセージ パスワード入力あり チェック:半角や桁数チェック(false) エラーメッセージ DBに登録されているユーザIDとパスワードと一致するとき セッション変数に ユーザIDの値を設定する。 次の画面(メニュー)に遷移する。 一致しなかった場合 ログイン画面に最遷移 環境は.NET2003 DB: Access 言語VB 大体でいいですが、どういうふうにやるのか教えていただけませんか よろしくお願いします。

  • 変数のinsertに関しまして

    MySQLのインサートに関して質問です。 2つの値を登録したい場合、 下記のように対応すれば、 データの挿入は通常どおり完了しますが、 insert into テーブル名 (フィールド1, フィールド2) values (値1, 値2);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 私の場合は、 「ken_name」と「machi_name」という変数を、 上記でいうところの、 「値1」と「値2」に入力したいと思っています。 変数の指す部分は、 それぞれ30文字程度の英数字です。 プログラム内で、 以下のように、 インサートのクエリー処理を行ってみたら、 DB接続も正常に出来ているし、 エラーとかも一切出ていないのですが、 DB内のテーブルに何も登録されていませんでした。 insert into テーブル名 (フィールド1, フィールド2) values (ken_name, machi_name);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ やり方としては、合っていますでしょうか? 何かアドバイスいただけると嬉しいです。 宜しくお願い致します。

  • PerlからDB接続し、データ登録時のエラー処理について

    PerlからDB接続し、データ登録時のエラー処理について DBにデータを登録するときにエラー処理を加えたいと思っていますが、 色んなサイトを参考にさせて頂いて、下記のようにしてみたのですが うまくできません。 $sth = $db->prepare(" INSERT INTO DBNAME (hinmei,su,tani,tuikabi) VALUES($hinmei,$su,$tani,$hiduke) "); if(!$sth->execute){  print "接続エラー";  exit; } または、 $sth = $db->prepare(" INSERT INTO DBNAME (hinmei,su,tani,tuikabi) VALUES($hinmei,$su,$tani,$hiduke) "); $sth->execute or &error('DBに登録出来ません'); 両方とも登録出来なければエラーメッセージを出すように してみたのですが、キー項目が同じものを登録しようとすると $sth->execute この部分でとまってしまうらしく、次の処理に行きません。 もちろん、キー項目が同じでなければDBに登録出来ます。 どうすればエラー処理の設定ができるでしょうか。 教えてください。 お願いします。

    • ベストアンサー
    • Perl
  • DB接続ができなくなって困っています!

    いつも参考にさせていただいております。 今回、自宅のPCに構築した開発環境のDBに、急に接続できなくなりました。 ==================================== 【開発環境】※ASP環境 OS :windows 8 IIS:8.0 DB :(1)MySQL 5.5.32   ※「mysql-connector-odbc-5.2.5」もインストール済。  (2)Access2013 ==================================== 先日まで、問題なくDBに接続できていましたが、寝ぼけて何かの設定を変えてしまいました。 ※恥ずかしながら、気づいたら設定変更後で何の設定を変えたのか不明です。。。 すると、今まで正常に接続できていたMySQLとAccessが、以下のエラーで接続できなくなりました。 ==================================== 【MySQL接続】 Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。 【Access接続】 Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています ==================================== なお、接続箇所のロジックは以下となります。 ==================================== 【MySQL接続】 Set oCn = Server.CreateObject("ADODB.Connection") oCn.Open UDL_FILE(※1), "", "" ※1 上記「UDL_FILE」は、以下の内容を設定しているUDLファイルを読み込んでいます。 ------------------------ [oledb] ; Everything after this line is an OLE DB initstring PROVIDER=MSDASQL;DRIVER={MySQL ODBC 5.2 Unicode Driver};SERVER=localhost;USER=hogeU;PASSWORD=hogeP;DATABASE=hoge; ------------------------ 【Access接続】 Set poCnMdb = Server.CreateObject("ADODB.Connection") poCnMdb.Open DNS(※2), "", "" ※2 上記「DNS」は、ODBCデータソース アドミニストレーター(32bit版)で登録したシステムDSNです。 ------------------------ ドライバー:Microsoft Access Driver(*.mdb) ------------------------ ==================================== MySQLやODBCドライバーの再インストールを試みましたが、上記エラーが解消されません。 自業自得なのは重々承知しておりますが、復旧できなくて大変困っています。 お忙しいところ申し訳ありませんが、復旧方法のご教授をお願いいたします。 以上です。

  • ASPでDB接続エラー非表示方法

    業務で久しぶりにASP(.Netではありません)をいじっています。 お客様よりの要望でDB障害時などで自動的に表示されるDB接続エラーを他の画面に置き換えたいとの要望を頂いたのですが、 回避の仕方が今ひとつわかりません。 (global.asa内でAplication_ON_STARTにDBとの接続確認を行えばよいのではないかと思っているのですが) 基本的な内容で申し訳ございませんが、知識をお持ちの方お教えいただけないでしょうか。

  • phpからinsertできない

    またお世話になります。 PHPからMySQLへデータをインサートしたいのですが、各サイトを参考にしながら試しているのですがどうにも上手くいきません。 ソースを見ていただけますでしょうか? $con = mysql_connect("localhost","user","password") or die("MySQLに接続できません。"); mysql_select_db('test'); $sql = "SET CHARACTER SET UTF8"; $result = mysql_query($sql); $data1 = $HTTP_POST_VARS["inpdata1"]; $data2 = $HTTP_POST_VARS["inpdata2"]; $data3 = $HTTP_POST_VARS["inpdata3"]; $sql = 'INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES (`$data1`,`$data2`,`$data3`);'; $result = mysql_query($sql); print $data1; //ここでは通常にデータが表示されるので print $data2; //データの受け渡しは問題ないはずですが。 print $data3; mysql_free_result($result); mysql_close($con);

    • ベストアンサー
    • MySQL

専門家に質問してみよう