【问题标题】:Should I use PDO PARAM_LOB or PARAM_STR for MySQL TEXT type?对于 MySQL TEXT 类型,我应该使用 PDO PARAM_LOB 还是 PARAM_STR?
【发布时间】:2016-04-19 16:51:56
【问题描述】:

对于 MySQL TEXT 类型,我应该使用 PDO PARAM_LOB 还是 PARAM_STR?我希望我的数据有 5000 多个字符。

$stmt->bindParam(':notes', $notes, PDO::PARAM_STR);

$stmt->bindParam(':notes', $notes, PDO::PARAM_LOB);

【问题讨论】:

  • 对 TEXT 和 BLOB 类型使用 LOB。如果您使用PARAM_STR,PHP 将尝试分配足够的内存来容纳对象的最大大小,在 LONGTEXT/LONGBLOB 的情况下为 4GB。

标签: php mysql text pdo


【解决方案1】:

如果您要使用大量数据,正如您在用例中提到的那样,那么可以——我会使用PDO::PARAM_LOB 来使用数据流来操作您的数据。

根据PHP documentation

在您的应用程序中的某个时刻,您可能会发现您需要 在您的数据库中存储“大”数据。大通常意味着“大约 4kb 或更多”,虽然有些数据库之前可以愉快地处理高达 32kb 数据变得“大”。大对象可以是文本的或二进制的 自然。 PDO 允许您通过使用 PDOStatement::bindParam() 中的 PDO::PARAM_LOB 类型代码或 PDOStatement::bindColumn() 调用。 PDO::PARAM_LOB 告诉 PDO 映射 数据作为流,以便您可以使用 PHP Streams 对其进行操作 API。

并像这样使用它:

<?php
$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');
$stmt = $db->prepare("select contenttype, imagedata from images where id=?");
$stmt->execute(array($_GET['id']));
$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);
$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);

header("Content-Type: $type");
fpassthru($lob);

【讨论】:

    【解决方案2】:

    对于只有 5 KB 的少量文本,它没有任何区别。

    当您的文本接近 1000000 个字符时,您可能会开始担心。只要你不必处理这个数量,就完全不用担心那些东西

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多