PHP 使用 PDO 将图像上传到 mysql 数据库?
PHP Upload image to mysql database using PDO?
我设置了一个数据库,正在尝试向其中上传图像。该数据库名为 'blob' 并具有 3 个字段。 id、名称和图像,图像设置为 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.
如有任何帮助,我们将不胜感激。谢谢
编辑:现在已将我的 table 名称从 blob 更改为 imgupload,但仍然收到相同的错误消息?
blob
是一个 MySQL 保留字
要么将您的 table 重命名为其他名称,要么在其周围使用刻度线:
INSERT INTO `blob` ...
注意:通常最好将文件存储在文件夹中并引用文件,而不是将二进制数据存储在 table 中。这最终会显着增加您的数据库大小。
这与 blob 无关。这是关于二进制数据。尝试使用该行(但它也可能不起作用):
$db->prepare("INSERT INTO blob ( name, image) VALUES ('$imageName', " . $db->quote($imageData) . ")");
此外,您的查询也不安全(对于黑客而言),您应该清理数据库中的所有输入。 PDO 对 准备好的语句 .
有很好的支持
我设置了一个数据库,正在尝试向其中上传图像。该数据库名为 'blob' 并具有 3 个字段。 id、名称和图像,图像设置为 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.
如有任何帮助,我们将不胜感激。谢谢
编辑:现在已将我的 table 名称从 blob 更改为 imgupload,但仍然收到相同的错误消息?
blob
是一个 MySQL 保留字
要么将您的 table 重命名为其他名称,要么在其周围使用刻度线:
INSERT INTO `blob` ...
注意:通常最好将文件存储在文件夹中并引用文件,而不是将二进制数据存储在 table 中。这最终会显着增加您的数据库大小。
这与 blob 无关。这是关于二进制数据。尝试使用该行(但它也可能不起作用):
$db->prepare("INSERT INTO blob ( name, image) VALUES ('$imageName', " . $db->quote($imageData) . ")");
此外,您的查询也不安全(对于黑客而言),您应该清理数据库中的所有输入。 PDO 对 准备好的语句 .
有很好的支持