使用PDO在Database中存储可选的Image和所需文本

时间:2013-01-13 21:46:05

标签: php pdo

我想使用PDO存储数据(主要是文本)和可选图像。 所以,文本根本不是问题,但我的问题是“可选”图像。

如何构建提供可选图像字段的查询。

for text:类似于:

$conn = new PDO(DNS, username, password);
$sql = "INSERT INTO DATABASE (fields) VALUES ( using place holders (? or :holder))";
$stmt = $conn->prepare($sql);
$stmt->bindparam(':holder', '$_GET['value']');
$stmt->execute();

但是对于可选图像我该怎么办?

我有使用文件类型输入构建的表单:

<input type="file" name="image" />

更新:

让我们想象以下形式:

<form action="index.php" method="post" enctype="multipart/form-data" >
<input type="text" name="sometext" />
<input type="file" name="someimage"/>
<input type="submit" name="sendform" value="send"/>
</form>

文件类型输入是可选的,我想知道的是如何使用PDO为此目的构建查询,用户可能会或不会发送图像,但需要文本。

谢谢。

1 个答案:

答案 0 :(得分:-1)

来自PHP: Large Objects (LOBs)

<?php
$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');
$stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
$id = get_new_id(); // some function to allocate a new ID

// assume that we are running as part of a file upload form
// You can find more information in the PHP documentation

$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();

它的要点是你可以传递PDOStatement::bindParam一个文件句柄,告诉PDO应该保存为一个大对象(确切的数据类型将取决于你的数据库),PDO将处理其余的。

至于文件上传是可选的 - 只需检查他们是否上传了任何内容。如果他们没有,请绑定null而不是文件句柄。