无法将长数据发送到msql MEDIUMTEXT或MEDIUMBLOB

时间:2016-03-22 12:19:37

标签: php mysql

我只能在字符串包含523264个字符时发送数据。帮助!

include("conn.php");

$stmt = $conn->prepare("INSERT INTO json_t (json_string) VALUES (?)");
$null = NULL;
$stmt->bind_param("b",$null);

$stmt->send_long_data(0, $json_to_save);

$stmt->execute();
$stmt->close();
$conn->close();

我试过这个但仍然是同样的错误

  

“执行预准备语句时出错。行大小太大(> 8126)。   将某些列更改为TEXT或BLOB或使用ROW_FORMAT = DYNAMIC或   ROW_FORMAT = COMPRESSED可能有所帮助。在当前行格式中,BLOB前缀为   内联存储了768个字节。“

请帮助。

$stmt = $conn->prepare("INSERT INTO json_t (json_string) VALUES (?)");
$null = NULL;
$stmt->bind_param("b",$null);

$max_allowed_packet = 100000;
if (!$stmt->bind_param('b', $null))
die("Error binding parameters. {$stmt->error}\n");
echo "<br/><br/>";
foreach(str_split($v, $max_allowed_packet) as $packet )
if (!$stmt->send_long_data(0, $packet))
die("Error sending long packet. {$stmt->error}\n");
echo "<br/><br/>";
if (!$stmt->execute())
die("Error executing prepared statement. {$stmt->error}\n");

好的问题解决了。我把引擎换成了MyISAM。

2 个答案:

答案 0 :(得分:0)

  

允许以片段(或块)的形式将参数数据发送到服务器,例如如果blob的大小超过max_allowed_pa​​cket的大小。 可以多次调用此函数,以发送列的字符部分或二进制数据值,该列必须是TEXT或BLOB数据类型之一。

强调我的。

你需要自己打破字符串,例如使用str_split($json_to_save, 100000);,然后调用send_long_data将每个部分作为块发送到MySQL服务器。

答案 1 :(得分:0)

关于这个问题已经有很多问题了。

https://dba.stackexchange.com/questions/75328/row-size-error-with-mysql/75333#75333

(我不能标记为重复)

问题是您的服务器设置为innodb_log_file_size

如何找到一个好的设置: https://stackoverflow.com/a/18811422