mysql select语句不能在ubuntu服务器上运行,也不会返回任何错误

时间:2015-01-04 14:03:55

标签: php mysql mysqli

我正在尝试运行以下代码,以便在我的服务器上的mySQL数据库中选择一些数据

error_reporting(E_ALL);
    echo "1";
    $stmt = $this->con->prepare("SELECT articlecomments.articleCommentID,
                                        articlecomments.comment,
                                        articlecomments.comment_date,
                                        articlecomments.userID,
                                        users.username
                                FROM articlecomments
                                INNER JOIN users ON articlecomments.userID = users.user_id
                                WHERE articlecomments.articleID = ?
                                ORDER BY articlecomments.comment_date ASC");
    echo "2";
    echo $stmt->errno;
    echo $stmt->error;
    $stmt->bind_param("i", $articleID);
    echo "3";
    echo $stmt->errno;
    echo $stmt->error;
    $r = $stmt->execute();
    echo "4";
    echo $stmt->errno;
    echo $stmt->error;
    $stmt->bind_result($message_id, $messageStr, $message_date, $user_id, $username);
    echo "5";
    echo $stmt->errno;
    echo $stmt->error;
    $messages = array ();
    while($stmt->fetch()) {
        $message = new Message();
        $message->message_id     = $message_id;
        $message->message        = $messageStr;
        $message->message_date   = $message_date;
        $message->user_id        = $user_id;
        $message->username       = $username;
        array_push($messages, $message);
    }
    echo "6";
    $stmt->close();

    return $messages;

问题是,当我在我的ubuntu服务器上运行它时,它会从数据库中返回任何内容,但是当我在localhost上运行它时会发生这种情况。

回声用于检查代码运行的时间。它呼应:1234。 这意味着我的代码停在" bind_result(...)"。

没有打印出任何错误。 我也尝试直接在数据库中执行我的sql语句(替换?with 8)并获得正确的数据。这意味着所有列名等都是正确的。

可能是一些错误的php.ini设置还是我在做错了?

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我不知道真正的原因(可能是一个bug应该报告给mysql,至少是因为缺少警告/错误),但是我发现如果你限制了BLOB的大小对象,它的工作原理。

可能是因为:

11.1.3 String Type Overview

  

BLOB列,最大长度为65,535(216-1)字节。每个的   使用指示的2字节长度前缀存储BLOB值   值中的字节数。

     

可以为此类型指定可选长度M.如果这样做,   MySQL将列创建为足够大的最小BLOB类型   保持M字节长的值。

而且:

  

LONGBLOB

     

BLOB列,最大长度为4,294,967,295或4GB(232 - 1)   字节。 LONGBLOB列的有效最大长度取决于   在客户端/服务器协议和中配置了最大数据包大小   可用内存。每个LONGBLOB值使用4字节长度存储   前缀,表示值中的字节数。

不同的操作系统有不同的行为。

我不知道你的字段的数据类型,但是,如果你使用BLOBS,也许这可能会有所帮助。 在我的情况下,我需要存储不大于400K的PDF文件,因此设置BLOB(500000)解决了我的问题。