我想将从表单检索到的图像转换为二进制字符串,以便将其插入到sqlplus表中。我已经看过如何进行这种转换,我发现大多数解决方案都有这个:
示例表:
CREATE TABLE images (
image_id int,
image blob
PRIMARY KEY (image_id));
形式:
<form method="post" enctype="multipart/form-data" action="./Upload/UploadImage.php">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><span style="color: #FF0000;">*</span><br/>
<input type="submit" name="uploadImage" value="Upload Image"></form>
建议的转换解决方案:
<?php
$data = file_get_contents($_FILES["file"]["tmp_name"]);
$encoded_data = base64_encode($data);
//echo the data to check it's there
echo "Encoded Data: " . $encoded_data;
?>
如果我回复$data
我会得到一个混乱的字符串,但如果我回应$encoded_data
我只得到:Encoded Data:
然后什么都没有。
我希望能够使用
将此二进制数据插入到我的数据库中$sql = 'INSERT INTO images VALUES (1, \'' . $encoded_data . '\')';
(我知道这只是sql字符串 - 声明的执行不是我认为需要包含的内容)。
更新:我意识到我的$encoded_data = base64_encode($data);
行中有一个类型,所以现在可以正常工作,但是sql会抛出一个字符串文字太长的错误。
答案 0 :(得分:0)
$fp = fopen($_FILES['file']['tmp_name'], 'r');
$db_img = fread($fp, filesize($_FILES['file']['tmp_name']));
$db_img = addslashes($db_img);
$db_img = base64_decode($db_img);
然后
$sql = "INSERT INTO images VALUES (1,'$db_img')"