2013-12-20 9 views
5

私は自分のコードをデバッグしようとしていますが、mysql_error()は何も表示していません。mysql_error()にエラーが表示されない

or die("ERROR"); 

エラーを表示するため、私は何かが間違っていることを知っています。ですから問題はそのコード行でなければなりません。書き込むとき

or die(mysql_error()); 

これは空白になります。

while ($rows = mysql_fetch_array($sql6) or die(mysql_error())) { 

は今ここに完全なコードブロックです:

$sql6 = mysql_query("SELECT * FROM replies WHERE thread_id = $thread_id"); 
    $numRows = mysql_num_rows($sql6); 
    $replies = ''; 
    if ($numRows < 1) { 
     $replies = "There are no replies yet, you can make the first!"; 
    } else { 
     while ($rows = mysql_fetch_array($sql6) or die(mysql_error())) { 
      $reply_content = $rows['5']; 
      $reply_username = $rows['7']; 
      $reply_date = $rows['8']; 
      $reply_author_id = $rows['4']; 

      $sql9 = mysql_query("SELECT * FROM users WHERE id = '$reply_author_id'"); 
      $numRows = mysql_num_rows($sql9); 
      if ($numRows < 1) { 
       while ($rows = mysql_fetch_array($sql9)) { 
        $reply_user_fn = $rows['first_name']; 
        $reply_user_ln = $rows['last_name']; 
        $reply_user_id = $rows['id']; 
        $reply_user_pp = $rows['profile_pic']; 
        $reply_user_lvl = $rows['user_level']; 
        $reply_user_threads = $rows['threads']; 
        $reply_user_email = $rows['email']; 

        $replies .= '<tr><td valign="top" style="border: 1px solid black;">'; 
        $replies .= '<div class="reply" style="min-height: 125px;"'; 
        $replies .= '<h2>Re: ' . $thread_title . '</h2><br />'; 
        $replies .= '<em>by: ' . $reply_username . ' - ' . $reply_date . '</em><hr />'; 
        $replies .= $reply_content; 
        $replies .= '</div></td>'; 
        $replies .= '<td valign="top" width="200" align="center" style="border: 1px solid black;"'; 
        $replies .= '<img src="userdata/profile_pics/' . $reply_user_pp . '" width="80" height="80"><br />'; 
        $replies .= '<a href="profile.php?u=' .$reply_username . '" style="color: black;">'. $reply_username .'</a><br />'; 
        $replies .= '<a href="profile.php?u=' .$reply_username . '" style="color: black;">' . $reply_user_fn.' ' .$reply_user_ln . '</a><br />'; 
        $replies .= 'Threads: ' . $reply_user_threads . ' <br />Level: '. $reply_user_lvl .'<br />Sign up date: ' . $reply_user_email/*PUT SIGNUP DATE*/ .''; 
        $replies .= '<input type="button" name="addfriend" value="Add Friend">'; 
        $replies .= '</td>'; 
        } 
       } 
      } 
     } 

私が間違って何をやっていると、なぜPHPがMySQLを表示しませんここで私はエラーがあると思うのラインのための私のコードですエラー?、あなたがor dieを言うようがあることを意味し、実行なっていることを

try { 
    while ($rows = mysql_fetch_array($sql6)) { 
    // your code .. 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
    echo "---"; 
    echo mysql_error(); 
} 

注: おかげ

+3

lc_messages_dir=/usr/share/mysql 

これは、MySQLのリファレンスマニュアルに記載されています。私にとって以下は正しかったです'mysqli'または' PDO'にアップグレードします。 –

+0

まず、このWHERE thread_id = $ thread_idを 'WHERE thread_id = '$ thread_id'"に変更します(おそらく 'なぜ')。 –

+1

@ Fred-ii-何もしなかった – nitrous

答えて

1

あなたはこのように、あなたのコードが正しく動作していない理由を理解することtry..catchブロックを使用することができますあなたのコードのどこかにエラーがあり、mysql errorではありません。したがって、上記のコードはその例外をキャプチャして表示します。また、それが参照のためにそのポイントまで発生した場合は、mysql_errorを表示し、2つの文字列を比較することができます。

+0

これは何も表示せず、エラーを表示しません。 – nitrous

+0

php.iniのエラー報告をチェックしますか? error_reportingがオンの場合、上記のコードは機能するはずです。 – Imran

+1

'mysql_ *'関数は例外をスローしません。これまで – Sammitch

0

mysql_query()がおそらく正しいので、mysql_error()はありません。

クエリは、行を取得していないPHPコード間違っていた場合にはメッセージが表示されますので、あなたは、mysql_error()直後クエリを実行します。

$conn = mysql_connect(....); 
$sql6 = mysql_query("...", $conn) or die(mysql_error($conn)); 
// ... 
while ($rows = mysql_fetch_array()) { ... } // There's no mysql_error() here, it will return a data set (or not enter the while code block if it's null9 
+0

私は質問に何かエラーを取得していません。だから私のコードの問題は何ですか? – nitrous

+0

しかし、エラーがあります... '私が書くか死ぬか(" ERROR ");それはエラーを表示します。 ' –

+0

編集を見て、私は' $ conn'変数を追加しました。それはそのように機能しますか? http://php.net/manual/es/function.mysql-error.php –

5

ループ状態の内部にor die()を入れないでください。ループの状態がfalseになると、ループが終了する信号となり、ループが完了するたびにdie()がトリガーされます。

mysql_fetch_row()エラーがなくてもdie()ステートメントをトリガーしている行がない場合はfalseを返します。

+0

これは正解です。 "or"の前の部分が真の場合、PHPはループ状態の何かを評価し続けます。全体の状態が真であるかどうかを知りたいだけです。ダイは関数なので、呼び出され、コードは...ディーです。しかし、エラーがないので、mysql_errorは空の文字列を返します。 – vmanta

0

"mysql_query"の後に "or die"の位置を変更しても、まだmysqlエラーがなければ、どこかから$ thread_idを取得できますか?また

$thread_id=$_GET['thread_id']; 

のような、あなたは、複数のデータベース接続、mysql_error内部( '$のCONNECTION_NAME'))

のように使用している場合:

//Connect to database 
$main = mysql_connect(DB_HST, DB_USR, DB_PSS); 
mysql_select_db(DB_DB); 

$main2 = mysql_connect(DB_HST2, DB_USR2, DB_PSS2); 
mysql_select_db(DB_DB2); 

リターン右データベースにクエリを実行し、エラーを..

複数のデータベース接続を使用している場合、クエリは次のようになります
mysql_query("query") or die (mysql_error($main)); 

:私は、MySQLからエラー・メッセージを見ていないのと同様の問題があった

$query = mysql_query("SELECT * FROM table_name WHERE id=1", $connection_name); 
mysql_fetch_array($query); 
+0

"$ result = $ mysqli-> query($ sql);"を使用していて、falseを返します。それから私は "エコー$ mysqli - >エラー();"何も表示されません。何らかの理由で、mysqli-> error()はエラーが発生しても何も返しません。どうして? – James

0

。研究の結果、この問題はPHP自体とは関係ないものの、mysqlサーバの設定と関係しているようです。変数のデフォルト値lc_messages_dirは、既存のディレクトリ以外を指しています。 mysqld.cnfに行を追加した後、mysqlサーバを再起動して、最後にそれを動作させました。あなたが置く `またはダイ(mysql_error())`、mysql_query` `後のない` myqsl_fetch_array`を、そしてhttps://dev.mysql.com/doc/refman/5.7/en/error-message-language.html

関連する問題