2011-10-26 11 views
0
にINSERTエラーをキャッチされない

、そう簡単に行く...ここに新しいとプログラミングには本当に緑Mysql_error()PHP

私は私があるため、重複するレコードエラーで失敗しているINSERTを持って発見しました。私は、エラー#1062がポップアップしたリテラルを持つMySQLコンソールでクエリを実行することによってそれを理解しました。

私が理解したいことは、mysql_error()またはmysql_errno()が私のPHPスクリプトでこのエラーを検出しなかった理由です。

以下は、私が行ったことの一般的な設定です。私は、DB接続data_insert()

function data_insert($var1, $var2, $var3, $var4){ 

    $db = db_connect(); 
    $query = "INSERT INTO exampletable (id, id_2, id_3, id_4) 
      VALUES ('$var1', '$var2', '$var3', '$var4')"; 

    $result = $db->query($query); 
     if (!$result) 
      { 
      echo ('Database Error:' . mysql_error()); 
      } 
     else 
      { 
      echo "Data added to db"; 
      } 
} 

を呼び出すPHPファイルに送信するフォームを持っている:私は取得しています

function db_connect() 
{ 
    $result = new MySQLi('localhost', 'root', 'root', 'dbname'); 
    if (!$result) 
     throw new Exception('Could not connect to database server'); 
    else 
     return $result; 
} 

結果は次のとおりです。

Database Error: 

PHPエコー「データベースエラー: "INSERTは失敗しますが、後続のMySQLエラー情報はエコーされません。正直なところ、私は何を見ているのか正確には分かっていませんが、他の質問を読んで、php.iniファイルをダブルチェックしてエラー処理とE_ALLを確認しました。display_errorsは適切に設定されていますこの場合重要です)。

私の論理には、リンクリソースmysql_error()のスコープのようなものがありますか?

ご協力いただきありがとうございます。私はこれが恥ずかしいほど明白であることを期待しています。

私は上記のXSSとセキュリティの予防措置と一様例外処理が欠落していることを知っています。しかし、赤ん坊のステップ。議論のために簡略化してあります。

答えて

3

あなたのDB操作のために(Iに注意してください)mysqliのを使用しているが、mysql_error(無I)を呼んでいます。それらは全く異なる2つのインターフェースであり、内部状態を全く共有しません。 1つのDBハンドル/結果は他のものでは使用できません。

代わりにmysqli_error()を試してください(Iに注意してください)。

+0

を使用する必要があります。ありがとう! – PHPeer

0

私が知る限り、あなたは接続とクエリにMySQLiクラスを使用しているようですが、MySQLエラーメッセージにアクセスしようとしています。 MySQLiとMySQLは同じではないので、一方のエラーは他方のエラーには表示されません。 MySQLではなく、MySQLiのエラー処理を参照する必要があります。

+0

これはあなたのおかげでありがたいことでした。 – PHPeer

0

mySQL DBに接続するための2つの別々の方法が混乱しています。

mysql_error()は、mysql_query()で実行されるクエリでのみ機能します。

あなたはmysqliのを使用しているとして、あなたは、私はちょうどそれが基本的なものになるだろう知っていたmysqli_error()

関連する問題