PHP--PDO大对象(LOBs)

伊谢尔伦
Freigeben: 2016-11-22 09:30:18
Original
1145 Leute haben es durchsucht

应用程序在某一时刻,可能需要在数据库中存储“大”数据。“大”通常意味着“大约 4kb 或以上”,尽管某些数据库在数据达到“大”之前可以轻松地处理多达 32kb 的数据。大对象本质上可能是文本或二进制。在PDOStatement::bindParam() 或 PDOStatement::bindColumn()调用中使用 PDO::PARAM_LOB 类型码可以让 PDO 使用大数据类型。PDO::PARAM_LOB 告诉 PDO 作为流来映射数据,以便能使用 PHP Streams API 来操作。

Example #1 从数据库中显示一张图片

下面例子绑定一个 LOB 到 $lob 变量,然后用 fpassthru() 将其发送到浏览器。因为 LOB 代表一个流,所以类似 fgets()、 fread() 以及stream_get_contents() 这样的函数都可以用在它上面。

<?php
    $db = new PDO(&#39;odbc:SAMPLE&#39;, &#39;db2inst1&#39;, &#39;ibmdb2&#39;);
    $stmt = $db->prepare("select contenttype, imagedata from images where id=?");
    $stmt->execute(array($_GET[&#39;id&#39;]));
    $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);
?>
Nach dem Login kopieren

Example #2 插入一张图片到数据库

下面例子打开一个文件并将文件句柄传给 PDO 来做为一个 LOB 插入。PDO尽可能地让数据库以最有效的方式获取文件内容。

<?php
    $db = new PDO(&#39;odbc:SAMPLE&#39;, &#39;db2inst1&#39;, &#39;ibmdb2&#39;);
    $stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
    $id = get_new_id(); // 调用某个函数来分配一个新 ID
    // 假设处理一个文件上传
    // 可以在 PHP 文档中找到更多的信息
    $fp = fopen($_FILES[&#39;file&#39;][&#39;tmp_name&#39;], &#39;rb&#39;);
    $stmt->bindParam(1, $id);
    $stmt->bindParam(2, $_FILES[&#39;file&#39;][&#39;type&#39;]);
    $stmt->bindParam(3, $fp, PDO::PARAM_LOB);
    $db->beginTransaction();
    $stmt->execute();
    $db->commit();
?>
Nach dem Login kopieren

Example #3 插入一张图片到数据库:Oracle

对于从文件插入一个 lob,Oracle略有不同。必须在事务之后进行插入,否则当执行查询时导致新近插入 LOB 将以0长度被隐式提交:

<?php
 $db = new PDO(&#39;oci:&#39;, &#39;scott&#39;, &#39;tiger&#39;);
   $stmt = $db->prepare("insert into images (id, contenttype, imagedata) " .
       "VALUES (?, ?, EMPTY_BLOB()) RETURNING imagedata INTO ?");
   $id = get_new_id(); // 调用某个函数来分配一个新 ID

   // 假设处理一个文件上传
   // 可以在 PHP 文档中找到更多的信息
   $fp = fopen($_FILES[&#39;file&#39;][&#39;tmp_name&#39;], &#39;rb&#39;);

   $stmt->bindParam(1, $id);
   $stmt->bindParam(2, $_FILES[&#39;file&#39;][&#39;type&#39;]);
   $stmt->bindParam(3, $fp, PDO::PARAM_LOB);

   $stmt->beginTransaction();
   $stmt->execute();
   $stmt->commit();
?>
Nach dem Login kopieren


   


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!