我正在尝试将头像图片上传到MySQL数据库。我的代码工作正常,但问题出在SQL查询...
这是我的代码:
<?php
if(isset($_POST)){
if(isset($_FILES['avatar'])){
$errors= array();
$file_name = $_FILES['avatar']['name'];
$file_size =$_FILES['avatar']['size'];
$file_tmp =$_FILES['avatar']['tmp_name'];
$file_type=$_FILES['avatar']['type'];
//print_r($_FILES['avatar']['name']);
$file_ext = pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION);
//$file_ext=strtolower(end(explode('.',$_FILES['avatar']['name'])));
$expensions= array("jpg","gif","jpeg","png","bmp");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a JPG, GIF, BMP or PNG formats...";
}
if($file_size > 8000000){
$errors[]='File size must be excately 8 MB';
}
//print_r($file_tmp); exit;
if(empty($errors)==true){
$randname = (rand(0,1000));
$file_data=date("d-m-Y-H-i-s");
$file_name=$file_data.$randname;
move_uploaded_file($file_tmp,"avatars/".$file_name);
echo "Success";
$currentsessionid = $_SESSION["userid"];
$query = $conn->prepare("UPDATE users SET
avatar = ?, WHERE id = ?");
$insert = $query->execute(array(
"$file_name","$currentsessionid"
));
}else{
print_r($errors);
}
}
} } ?>
仔细查看SQL查询,我有表users
和列id
,avatar
... avatar列是varchar
,只是我想把文件名放到avatar
其中current logged in user id
..
答案 0 :(得分:0)
insert-statement中有错误。
插入必须看起来像这样:
INSERT INTO users (avatar, id) VALUES('avatar.png', $sessionid)
答案 1 :(得分:0)
您向我们展示的代码中没有session_start()
,也没有任何内容可以初始化您的数据库连接。您还没有说明是的问题。
您应该检查$conn->prepare()
和$query->execute()
的返回值。如果它们是假的,那么你应该轮询错误,然后在这里引用它们,如果你自己无法解决问题。
INSERT INTO用户SET avatar =?,WHERE id =?
...不是SQL。您将INSERT的语法与UPDATE的语法混淆。 jiGL提供了如何正确编写INSERT的示例。因为您可能已经在代表用户的users
中有一个记录,并且想要将其更改为包含头像路径:
UPDATE users SET avatar = ? WHERE id = ?
BTW - 您生成的文件名(用户提供的not using the name的荣誉)没有扩展名,这使得再次提供服务变得相当困难。