如何在id =?处插入imagename ...在mySQL中[PHP]

时间:2017-04-21 16:01:36

标签: php html mysql sql pdo

我正在尝试将头像图片上传到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和列idavatar ... avatar列是varchar,只是我想把文件名放到avatar其中current logged in user id ..

2 个答案:

答案 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的荣誉)没有扩展名,这使得再次提供服务变得相当困难。