PHP使用PDO将图像上传到mysql数据库


PHP Upload image to mysql database using PDO?

我已经建立了一个数据库,正在尝试向其中上传一个图像。该数据库名为"blob",有3个字段。id、name和image,其中image设置为blob。当试图上传图像时,我遇到了一个错误,我不确定。下面是我的代码。

<?php
include ("dbConnect.php");
?>
<form action="imageuploadtest.php" enctype="multipart/form-data" method="post">
<input name="image" type="file"><input name="submit" type="submit" value="Upload">
</form>
<?php 
if(isset($_POST['submit']))
{
  $imageName = $_FILES["image"]["name"];
  $imageData = file_get_contents($_FILES["image"]["tmp_name"]);
  $imageType = $_FILES["image"]["type"];
  if(substr($imageType,0,5)=="image")
  {
     $dbQuery = $db->prepare("INSERT INTO blob ( name, image) VALUES ('$imageName', '$imageData')");
     $dbQuery->execute();
  }
  else
  {
   echo "only images are allowed";
  } 
}
?>

数据库连接很好,但我收到以下错误消息,我不知道如何修复。

 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters' in N:'ftp'compc'd12ac1'FlightsFromNI'imageuploadtest.php:23 Stack trace: #0 N:'ftp'compc'd12ac1'FlightsFromNI'imageuploadtest.php(23): PDO->prepare('INSERT INTO blo...') #1 {main} thrown in N:'ftp'compc'd12ac1'FlightsFromNI'imageuploadtest.php on line 23.

如有任何帮助,我们将不胜感激。谢谢

编辑:现在已经将我的表名从blob更改为imgupload,但仍然收到相同的错误消息?

blob是MySQL保留字

  • http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

要么将您的表重命名为其他名称,要么在其周围使用记号:

INSERT INTO `blob` ...

Nota:通常最好将文件存储在文件夹中并引用文件,而不是将二进制数据存储在表中。这最终将大大增加您的数据库大小。

这与blob无关。它是关于二进制数据的。尝试使用该行(但也可能不起作用):

$db->prepare("INSERT INTO blob ( name, image) VALUES ('$imageName', " . $db->quote($imageData) . ")");

此外,您的查询不安全(对于黑客),您应该清除数据库中的所有输入。PDO非常支持准备好的语句