php - 尝试将图像存储到数据库时出现 sql 错误(已更新)
问题描述
UPDATED:
正如评论部分所建议的,我已经更新了我的代码并现在使用 PDO。我仍然有同样的错误。我正在尝试将多个图像存储到数据库(phpmyadmin)。当我尝试上传时出现错误Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'file.png' in 'field list'
我的数据库:
我有一个名为 image_upload 的数据库,其中有一个名为 car_detailss 的表,它有一个 id (int11)、car_name(varchar 255) 和 imageOfcar(longblob)。
这是我的图像细节:
Array
(
[0] => Array
(
[name] => file.png
[type] => image/png
[tmp_name] => /opt/lampp/temp/phpJYyrQn
[error] => 0
[size] => 77776
)
[1] => Array
(
[name] => files.png
[type] => image/png
[tmp_name] => /opt/lampp/temp/phpXOLvzL
[error] => 0
[size] => 84710
)
)
正如评论部分所建议的,我现在正在使用 PDO 这是我的代码:(更新)
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="userfile[]" multiple="" />
<input type="submit" name="submit" value="upload" />
</form>
<?php
$servername="localhost";
$username="root";
$password = "";
$dbname="image_upload";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// begin the transaction
$conn->beginTransaction();
$phpFileUploadErrors = array(
0 => "There is no error, the file uploaded with success",
1 => "The uploaded file exceeds the upload_max_filesize directive in php.ini",
2 => "The upload file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
3 => "The upload file was only partially uploaded",
4 => "No file was uploaded",
6 => "Missing a temporary folder",
7 => "Failed to write file to disk.",
8 => "A php extension stopped the file upload"
);
if(isset($_FILES['userfile'])) {
$file_array = reArrayFiles($_FILES['userfile']);
pre_r($file_array);
for($i=0;$i<count($file_array);$i++) {
$carname = $file_array[$i]["tmp_name"];
$tablename = "car_detailss";
$imagename = $file_array[$i]["name"];
pre_r($carname);
pre_r($imagename);
$conn->exec("INSERT INTO `car_detailss`(`car_name`, `imageOfcar`) VALUES ( $carname,$imagename)");
}
}
$conn->commit();
echo "new records created succesfully";
} catch(PDOException $e) {
// roll back the transaction if something failed
$conn->rollback();
echo "Error: " . $e->getMessage();
}
$conn = null;
function reArrayFiles($file_post) {
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i = 0; $i < $file_count; $i++){
foreach($file_keys as $key) {
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
function pre_r($array) {
echo '<pre>';
print_r($array);
echo '</pre>';
}
?>
</body>
</html>
如何修复我提到的(在顶部)显示的错误?
解决方案
正如评论部分所建议的那样。我首先将我的代码更改为 PDO,而不是在没有任何反引号或“”的情况下插入数据库,而是按照评论部分的建议并在将图像插入数据库时添加了反引号和“”。
$conn->exec( "INSERT INTO
car_detailss (
car_name ,
imageOfcar) VALUES ('$carname', '$imagename')");
现在我可以将图像插入到我的数据库中。我也在这里更新了我的代码。
我的代码:
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="userfile[]" multiple="" />
<input type="submit" name="submit" value="upload" />
</form>
<?php
$servername="localhost";
$username="root";
$password = "";
$dbname="image_upload";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// begin the transaction
$conn->beginTransaction();
$phpFileUploadErrors = array(
0 => "There is no error, the file uploaded with success",
1 => "The uploaded file exceeds the upload_max_filesize directive in php.ini",
2 => "The upload file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
3 => "The upload file was only partially uploaded",
4 => "No file was uploaded",
6 => "Missing a temporary folder",
7 => "Failed to write file to disk.",
8 => "A php extension stopped the file upload"
);
if(isset($_FILES['userfile'])) {
$file_array = reArrayFiles($_FILES['userfile']);
pre_r($file_array);
for($i=0;$i<count($file_array);$i++) {
$carname = $file_array[$i]["size"];
$tablename = "car_detailss";
$imagename = $file_array[$i]["name"];
$conn->exec( "INSERT INTO `car_detailss` (`car_name`, `imageOfcar`) VALUES ('$carname', '$imagename')");
}
}
$conn->commit();
echo "new records created succesfully";
} catch(PDOException $e) {
// roll back the transaction if something failed
$conn->rollback();
echo "Error: " . $e->getMessage();
}
$conn = null;
function reArrayFiles($file_post) {
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i = 0; $i < $file_count; $i++){
foreach($file_keys as $key) {
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
function pre_r($array) {
echo '<pre>';
print_r($array);
echo '</pre>';
}
?>
</body>
</html>
推荐阅读
- redis - 无法从控制台应用程序连接到 redis
- c++ - 在 C++ 中,在 10x10 数组中生成特定数量的多个随机字符
- python - 我可以检查熊猫数据框索引是否结束?
- css - calc() 函数不返回百分比
- javascript - Mad Libs javascript 代码无法正常工作
- python - OpenCV+Python 人脸检测器改变矩形大小(大 25%)
- regex - 在一行中某个符号第 n 次出现后匹配数字
- swift - 如何快速从“默认值”中读取值?
- java - 具有返回字符串的静态方法的有界类型
- c# - [A]Sales.ExtendedUserEntityMaster 不能转换为 [B]Sales.ExtendedUserEntityMaster