web-dev-qa-db-ja.com

mysql_error()がエラーを表示しない

コードをデバッグしようとしていますが、mysql_error()は何も表示しません。私が書くとき、私は何かが間違っていることを知っています

or die("ERROR");

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エラーを表示しないのですか?ありがとう

5
nitrous

ループ条件の中にor die()を入れないでください。ループ条件がfalseになると、ループが終了するように通知され、die()ループが完了するたびにもトリガーされます。

mysql_fetch_row()は、行がなくなるとfalseを返します。これが、エラーがないにもかかわらずdie()ステートメントをトリガーしているものです。

5
Sammitch

次のように、try..catchブロックを使用して、コードが正しく機能しない理由を理解できます。

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

、あなたが言うように、or dieが実行されています。これは、mysql errorではなく、コードのどこかにエラーがあることを意味します。したがって、上記のコードはその例外をキャプチャして表示します。また、参照用にその時点までに発生した場合は、任意のmysql_errorが表示されるため、2つの文字列を比較できます。

1
Stoic

Mysqlからのエラーメッセージが表示されないという同様の問題がありました。調査の結果、問題はPHP自体とは関係がなく、mysqlサーバーの構成と関係があるようでした。変数のデフォルト値lc_messages_dir存在しないディレクトリを指しています。mysqld.cnfに行を追加した後、mysqlサーバーを再起動すると、最終的に機能しました。私にとっては、次のことが正しいものでした。

lc_messages_dir=/usr/share/mysql

Mysqlリファレンスマニュアルで説明されています: https://dev.mysql.com/doc/refman/5.7/en/error-message-language.html

0
user3092162

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

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

$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
Alejandro Iván

それでもmysqlエラーが発生しない場合は、「mysql_query」の後に「ordie」の位置を変更した後、どこかから$ 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));

複数のデータベース接続を使用する場合、クエリは次のようになります。

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