使用php表单将图像上载到mysql
我有这个表单可以将图片上传到我的mysql数据库:使用php表单将图像上载到mysql,php,mysql,mysqli,image-uploading,Php,Mysql,Mysqli,Image Uploading,我有这个表单可以将图片上传到我的mysql数据库: <h4>Add Photo</h4> <form enctype="multipart/form-data" method="post"> <?php require_once 'config.php'; $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); if (isset($_POST['up
<h4>Add Photo</h4>
<form enctype="multipart/form-data" method="post">
<?php
require_once 'config.php';
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (isset($_POST['upload'])){
$caption = $_POST['caption'];
$albumID = $_POST['album'];
$file = $_FILES ['file']['name'];
$file_type = $_FILES ['file']['type'];
$file_size = $_FILES ['file']['size'];
$file_tmp = $_FILES ['file']['tmp_name'];
$random_name = rand();
if (empty($file)){
echo "Please enter a file <br>";
} else {
move_uploaded_file($file_tmp, 'uploads/'.$random_name.'.jpg');
mysqli_query(
$mysqli,
"INSERT INTO photos (caption, image_url, date_taken, imageID) "
. "VALUES('"
. addslashes($caption) . "', '"
. $random_name . ".jpeg', NOW(), ?)"
);
echo "Photo successfully uploaded!<br>";
}
}
?>
Caption: <br>
<input type="text" name="caption">
<br><br>
Select Album: <br>
<select name="album">
<?php
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$result = $mysqli->query("SELECT * FROM albums");
while ($row = $result->fetch_assoc()) {
$albumID = $row['albumID'];
$title = $row['title'];
echo "<option value='$albumID'>$title</option>";
}
?>
</select>
<br><br>
Select Photo: <br>
<input type="file" name="file">
<br><br>
<input type="submit" name="upload" value="Upload">
</form>
添加照片
正如Fred-ii-提到的,问题是您使用了一个“?”作为列imageID的值,但是您没有使用准备好的语句。您没有检查错误,但如果检查了,您会得到如下结果:
您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解在第xx行“?)”附近使用的正确语法
此外,您正在使用addslashes将用户数据获取到查询中,这是不安全的(您应该使用)
解决这两个问题的好办法是使用事先准备好的声明。你可以这样做:
move_uploaded_file($file_tmp, 'uploads/'.$random_name.'.jpg');
$ret = mysqli_prepare($mysqli, "INSERT INTO photos (caption, image_url, date_taken)
VALUES(?, ?, NOW())");
$filename = $random_name + ".jpeg";
mysqli_stmt_bind_param($ret, "ss", $caption, $filename);
mysqli_stmt_execute($ret);
echo "Photo successfully uploaded!<br>";
move_upload_file($file_tmp,'uploads/.$random_name.'.jpg');
$ret=mysqli\u prepare($mysqli,“插入照片(标题、图片url、拍摄日期)”
值(?,现在为())”;
$filename=$random_name+“.jpeg”;
mysqli_stmt_bind_param($ret,“ss”,$caption,$filename);
mysqli_stmt_execute($ret);
echo“照片已成功上传!
”;
更新:由于id是自动生成的,因此我将该列从查询中完全删除。您正在使用?
作为值中的占位符。这是语法,您没有为此做任何准备。将或die(mysqli_error($mysqli))
添加到mysqli_query()
并找出失败的原因。您将看到语法错误。。那么,谁知道OP想要在他们的imageID
专栏中使用什么呢。你说得对,我添加了一个值得参考的内容。诚然,我们不知道该列可能是什么,但是添加一个完整的示例以便他可以使用准备好的语句查看代码的外观是很有用的。很难说他们是否看到了你的答案/我的评论。时间会证明一切;-)非常感谢你的帮助!我的imageID列是一个整数,我已将其设置为自动增量。我应该如何处理代码?还是我需要修改你发布的代码@AnxoI更新了该示例的外观。基本上,您只需从查询中删除该列。不提及它意味着它将获得默认值,即自动生成的值。