7

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

4
  • 3
    You put or die(mysql_error()) after mysql_query, not myqsl_fetch_array, and then you upgrade to mysqli or PDO. Commented Dec 20, 2013 at 1:02
  • First (or should I say 2nd) change this WHERE thread_id = $thread_id" to WHERE thread_id = '$thread_id'" which is most likely the why. Commented Dec 20, 2013 at 1:04
  • 1
    @Fred-ii- That didn't do anything Commented Dec 20, 2013 at 1:06
  • Well, you have problems elsewhere then. I'll see if I can't find anything else. But that's one of the issues. Commented Dec 20, 2013 at 1:09

5 Answers 5

5

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.

Sign up to request clarification or add additional context in comments.

1 Comment

This is the correct answer. PHP will continue evaluating anything in the loop condition, AFTER an "or" ... if the part BEFORE the "or" is true. It simply wants to know if the whole condition is true. Die is a function so it will be called and your code will..die. But your mysql_error will return an empty string, because there is no error.
1

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.

5 Comments

do you check error reporting on php.ini. If error_reporting is on then above code should work.
mysql_* functions do not throw exceptions. ever.
@Sammitch: I know... But, in this particular case, the user is stating the or die is getting executed, and therefore, there must be an error and not a mysql_error(), which is what is being captured for the user by this code. Updated my answer to reflect this view.
There is not error. At least not in this block of code. @user3112869 putting or die() in the loop condition will always trigger the die() when the loop ends regardless of if an error happened or not. See my answer.
@Sammitch: thank you for enlightening me.. upvoted :)
0

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

3 Comments

I am not getting any errors at on the queries. So what is the problem with my code?
But there is an error... because when I write or die("ERROR"); It displays ERROR.
Look at the edit, I added the $conn variable. Does it work that way? php.net/manual/es/function.mysql-error.php
0

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

1 Comment

I am using "$result = $mysqli->query($sql); " and it returns false. Then I do "echo $mysqli->error();" and nothing is displayed. For some reason, mysqli->error() returns nothing even when an error occurs. Why?
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.