2

我有一个大于max_allowed_packet(1MB)的文本,为什么我不能用下面的代码插入数据?

$db = new PDO('mysql:dbname=test;host=localhost', 'root', '5u4f1d');

$db->exec('SET NAMES utf8');

$stmt = $db->prepare('INSERT `book` (`text`) VALUES (?)');
$tx = file_get_contents('./test.html');
$stmt->bindParam(1, $tx, PDO::PARAM_LOB);

$db->beginTransaction();
$stmt->execute();
$db->commit();

它说:Fatal error: Cannot pass parameter 1 by reference,但我从以下位置复制代码: - http://www.php.net/manual/en/pdo.lobs.php

数据库结构:

CREATE TABLE `book`
(`text` mediumtext COLLATE utf8_unicode_ci NOT NULL)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4

1 回答 1

0

试试这样:

$db = new PDO('mysql:dbname=test;host=localhost', 'root', '5u4f1d');

$db->exec('SET NAMES utf8');

$stmt = $db->prepare('INSERT `book` (`text`) VALUES (?)');

// note the "fopen" function, not file_get_contents
$tx = fopen('test.html', 'rb');
$stmt->bindParam(1, $tx, PDO::PARAM_LOB);

$db->beginTransaction();
$stmt->execute();
$db->commit();

还有关于:

指出:

... 将 LOB 绑定到名为 $lob 的变量中,然后使用 fpassthru() 将其发送到浏览器。由于 LOB 表示为流,因此可以在其上使用 fgets()、fread() 和 stream_get_contents() 等函数。

另外,尝试将“文本”表字段更改为 BLOB 数据类型,如下所示:

CREATE TABLE `book`
(`text` BLOB NOT NULL)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
于 2012-10-15T15:32:56.143 回答