mysql_error()没有显示错误

时间:2013-12-20 00:55:53

标签: php mysql syntax-error mysql-error-1064

我正在尝试调试我的代码,但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 个答案:

答案 0 :(得分:5)

不要将or die()放在循环条件中。循环条件变为false表示循环结束,并且每次循环完成时也会触发die()

mysql_fetch_row()在没有更多行时返回false,这是触发die()语句的内容,尽管没有错误。

答案 1 :(得分:1)

您可以使用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 :(得分:0)

没有mysql_error(),因为mysql_query()可能是正确的。

在查询之后立即执行mysql_error() ,因为如果查询错误,它会显示一条消息,而不是获取行的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

答案 3 :(得分:0)

如果仍然没有mysql错误,在“mysql_query”之后更改“或死”位置之后..你从某个地方获得$ 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);

答案 4 :(得分:0)

我有类似的问题,没有看到来自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