mirror of
https://github.com/php/doc-tr.git
synced 2026-03-23 23:02:09 +01:00
133 lines
4.4 KiB
XML
133 lines
4.4 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: eae19eb5fe0f5bebcbce382ea7a505cedeb5a883 Maintainer: nilgun Status: ready -->
|
||
<chapter xml:id="pdo.lobs" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>Büyük Veri Nesneleri (LOB'lar)</title>
|
||
<para>
|
||
Uygulamanızın bir yerinde veritabanınızda büyük müktarda veri saklamanız
|
||
gerekebilir. Burada büyük veriden kasıt 4kB civarı olsa da bazı
|
||
veritabanları için büyük veri 32kB'tan başlar. Büyük veriler ikil veya
|
||
dizgesel olabilir. <methodname>PDOStatement::bindParam</methodname> ve
|
||
<methodname>PDOStatement::bindColumn</methodname> çağrılarında büyük
|
||
verilerlerle çalışmak için <constant>PDO::PARAM_LOB</constant> veri türünü
|
||
kullanabilirsiniz. <constant>PDO::PARAM_LOB</constant>, verinin bir akım
|
||
olarak eşleneceği anlamına gelir. Dolayısıyla, bu veriler üzerinde <link
|
||
linkend="ref.stream">PHP Akım işlevleri</link> ile işlem yapabilirsiniz.
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>- Veritabanındaki bir resmin gösterilmesi</title>
|
||
<para>
|
||
Bu örnekte bir LOB, $lob değişkeni ile ilişkilendirilmekte ve
|
||
<function>fpassthru</function> üzerinden tarayıcıya gönderilmektedir. LOB
|
||
bir akımla temsil edildiğinden <function>fgets</function>,
|
||
<function>fread</function> ve <function>stream_get_contents</function>
|
||
gibi işlevlerle üzerinde işlem yapabilirsiniz.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>- Bir resmin veritabanına yerleştirilmesi</title>
|
||
<para>
|
||
Bu örnekte bir dosya açılıp, bir LOB olarak veritabanına yerleştirilmek
|
||
üzere, dosya tanıtıcısı PDO'ya aktarılmaktadır. PDO, dosya içeriğini
|
||
veritabanına yerleştirme işlemini en verimli şekilde yapacaktır.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');
|
||
$stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
|
||
$id = get_new_id(); // Yeni bir kimlik ayıran bir işlev
|
||
|
||
// Resmin bir dosya yükleme formundan geldiğini varsayıyoruz
|
||
// PHP belgelerinde bu konuda ayrıntılı bilgi bulabilirsiniz
|
||
|
||
$fp = fopen($_FILES['file']['tmp_name'], 'rb');
|
||
|
||
$stmt->bindParam(1, $id);
|
||
$stmt->bindParam(2, $_FILES['file']['type']);
|
||
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);
|
||
|
||
$db->beginTransaction();
|
||
$stmt->execute();
|
||
$db->commit();
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>- Oracle'da bir resmi veritabanına yerleştirmek</title>
|
||
<para>
|
||
Oracle, bir LOB'u bir dosyadan alıp veritabanına yerleştirirken farklı bir
|
||
sözdizimi kullanımını gerektirir. Esas olarak, yerleştirme işlemi bir
|
||
toplu hareket olarak gerçekleştirilir. Böyle yapılmazsa oluşturulan LOB,
|
||
sorgu çalıştırıldığında örtük olarak sıfır uzunluklu bir veri girişinin
|
||
parçası haline gelir.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$db = new PDO('oci:', 'scott', 'tiger');
|
||
$stmt = $db->prepare("insert into images (id, contenttype, imagedata) " .
|
||
"VALUES (?, ?, EMPTY_BLOB()) RETURNING imagedata INTO ?");
|
||
|
||
$id = get_new_id(); // Yeni bir kimlik ayıran bir işlev
|
||
|
||
// Resmin bir dosya yükleme formundan geldiğini varsayıyoruz
|
||
// PHP belgelerinde bu konuda ayrıntılı bilgi bulabilirsiniz
|
||
$fp = fopen($_FILES['file']['tmp_name'], 'rb');
|
||
|
||
$stmt->bindParam(1, $id);
|
||
$stmt->bindParam(2, $_FILES['file']['type']);
|
||
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);
|
||
|
||
$db->beginTransaction();
|
||
$stmt->execute();
|
||
$db->commit();
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</chapter>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|
||
|