我的文字大于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
db struct:
CREATE TABLE `book`
(`text` mediumtext COLLATE utf8_unicode_ci NOT NULL)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
答案 0 :(得分: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表示为a 流,fgets(),fread()和stream_get_contents()等函数 可以用在它上面。
另外,尝试将“text”表字段更改为BLOB数据类型,如下所示:
CREATE TABLE `book`
(`text` BLOB NOT NULL)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;