如何使用PDO方法插入图像?
我收到了以下错误消息:
警告:PDOStatement :: execute():MySQL服务器在第21行的C:\ xampp \ htdocs \ testing \ testform.php消失了
警告:PDOStatement :: execute():在第21行的C:\ xampp \ htdocs \ testing \ testform.php中读取结果集的标题时出错
但是当我上传较小尺寸的图像时,它可以存储到数据库中,但图像名称不是图像名称。 我的图片名称是“asdas” 但是当它存储到数据库中时,就会变成这样的“?
PNG \ r \ n \Ž\ n \ 0 \ 0 \ 0 \ rIHDR \ 0 \ 0 | \ 0 \ 08 \ 0 \ 0 \0米?:\ 0 \ 0 \ 0sRGB \ 0 ??? \ 0 \ 0 \ 0gAMA \ 0 \ 0 ??? \ 0 \ 0 \ 0 pHYs \ 0 \ 0?\ 0 \ 0 ?? o?d \ 0 \ 0 ?? IDATx ^ ??`?? ?? ?? ??????? C 17 {?R 11 * ?? ?? - = ???小时?? F 14 HO和放大器;!?2 Bü?的?????? \'???? Z Z?A2?
<form action="testform.php" method="post" enctype="multipart/form-data">
<input name="image" type="file">
<input name="submit" type="submit" value="Upload Picture!">
</form>
<?php
if(isset($_POST['submit']))
{
$pdo = new PDO('mysql:dbname=forms1;host=localhost', 'root', 'root',
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$imageName = mysql_real_escape_string($_FILES["image"]["name"]);
$imageData = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));
$imageType = mysql_real_escape_string($_FILES["image"]["type"]);
if(substr($imageType,0,5)=="image")
{
$stmt = $pdo->prepare('INSERT INTO files (name,image) VALUES (:name,:image)');
$stmt->execute(array('name' => $imageData, 'image' => $imageType));
echo "Image Uploaded";
}
else
{
echo "Only images are allowed";
}
}
?>
答案 0 :(得分:2)
执行预准备语句时,您将名称字段设置为$imageData
而不是$imageName
。我相信你的意思是:
$stmt->execute(array('name'=>$imageName,'image'=>$imageData));
另外,将图像直接保存到数据库中通常被视为非常糟糕的形式。
此外,不需要mysql_real_escape_string调用。使用准备好的声明会为您解决问题。