Reputation: 1757
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
Upvotes: 7
Views: 40112
Reputation: 541
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
Upvotes: 0
Reputation: 1064
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);
Upvotes: 0
Reputation: 10754
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.
Upvotes: 1
Reputation: 32232
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.
Upvotes: 5
Reputation: 4051
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
Upvotes: 0