我正在尝试运行以下代码,以便在我的服务器上的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设置还是我在做错了?
非常感谢任何帮助
答案 0 :(得分:0)
我不知道真正的原因(可能是一个bug应该报告给mysql,至少是因为缺少警告/错误),但是我发现如果你限制了BLOB的大小对象,它的工作原理。
可能是因为:
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)解决了我的问题。