简体   繁体   中英

mysql_error() not displaying an error

I am trying to debug my code but mysql_error() isn't displaying anything. I know there is something wrong, because when I write

or die("ERROR");

It displays ERROR. So the problem must be with that line of code. When I write

or die(mysql_error());

It shows up blank. Here is my code for the line that I think has the error:

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

Now here is the full code block:

$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>';
                    }
                }
            }
        }

What am I doing wrong and why won't PHP display the mysql error? Thanks

Do not put or die() inside of a loop condition. The loop condition becoming false is what signals the loop to end, and that will also trigger die() every time your loop completes .

mysql_fetch_row() returns false when there are no more rows this is what is triggering your die() statement despite there being no error.

You can use a try..catch block to understand why your code is not working correctly, like this:

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

Note that , as you say or die is getting executed, which means that there is an error in your code somewhere, and not a mysql error . And, therefore, the above code will capture that exception and display it for you. Also, it will display any mysql_error , if it has occurred until that point for reference, so that you can compare the two strings.

There is no mysql_error() because mysql_query() is probably correct.

You do mysql_error() immediately after the query, because it will show a message if the query was wrong, not the PHP code that gets the rows.

$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

If still no mysql error, after changing the "or die" position after "mysql_query"..do you get $thread_id from somewhere?? like

$thread_id=$_GET['thread_id'];

Also, if you use, multiple database connections, inside mysql_error('$connection_name'))

Like:

//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);

return the error executing the query to the right database..

mysql_query("query") or die (mysql_error($main));

when using multiple database connection the query should look like:

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

I had similar problem of not seeing any error messages from mysql. After research it appeared that the problem has got nothing to do with PHP itself, but with mysql server configuration. The default value of the variable lc_messages_dir pointed to non existing directory. After adding a line in mysqld.cnf, then restarted the mysql server, and finally it worked. For me the following was the right one:

lc_messages_dir=/usr/share/mysql

It is described in mysql reference manual: https://dev.mysql.com/doc/refman/5.7/en/error-message-language.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM