【问题标题】:mysql UPDATE query not working for image upload via phpmysql UPDATE查询不适用于通过php上传图像
【发布时间】:2016-07-26 11:13:02
【问题描述】:

尝试通过php编写图像上传到mysql,
尝试使用用户ID更新行。
但是,不断给出这个错误:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '(image_type,image, image_size, image_name) VALUES ('images/1459926006.png','png'' 附近使用正确的语法

只是看不到什么是语法错误。

PHP:

   function upload(){
/*** check if a file was uploaded ***/
if(is_uploaded_file($_FILES['userfile']['tmp_name']) && getimagesize($_FILES['userfile']['tmp_name']) != false)
    {
    /***  get the image info. ***/
    $size = getimagesize($_FILES['userfile']['tmp_name']);
    /*** assign our variables ***/
    $type = $size['mime'];
    $imgfp = fopen($_FILES['userfile']['tmp_name'], 'rb');
    $size = $size[3];
    $name = $_FILES['userfile']['name'];
    $maxsize = 99999999;


    /***  check the file is less than the maximum file size ***/
    if($_FILES['userfile']['size'] < $maxsize )
        {
        /*** connect to db ***/
        $dbh = new PDO("mysql:host=localhost;dbname=table", 'username', 'password');

                /*** set the error mode ***/
                $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            /*** our sql query ***/
        $stmt = $dbh->prepare("UPDATE users (image_type,image, image_size, image_name) VALUES (?,?,?,?) WHERE user_id=?"); 

        /*** bind the params ***/
        $stmt->bindParam(1, $type);
        $stmt->bindParam(2, $imgfp, PDO::PARAM_LOB);
        $stmt->bindParam(3, $size);
        $stmt->bindParam(4, $name);
        $stmt->bindParam(4, $name);
        $stmt->bindParam(5, $_SESSION['user_id']);

        /*** execute the query ***/
        $stmt->execute();
        }
    else
        {
        /*** throw an exception is image is not of type ***/
        throw new Exception("File Size Error");
        }
    }
else
    {
    // if the file is not less than the maximum allowed, print an error
    throw new Exception("Unsupported Image Format!");
    }
}
?>

【问题讨论】:

    标签: php mysql pdo sql-update


    【解决方案1】:

    不要使用update query,因为insert query的语法不同

    改变

    $stmt = $dbh->prepare("UPDATE users (image_type,image, image_size, image_name) VALUES (?,?,?,?) WHERE user_id=?"); 
    

    $stmt = $dbh->prepare("UPDATE users SET image_type=?, image=?, image_size=1 ,image_name=?  WHERE user_id=?"); 
    

    你绑定$stmt-&gt;bindParam(4, $name);两次

     $stmt->bindParam(1, $type);
            $stmt->bindParam(2, $imgfp, PDO::PARAM_LOB);
            $stmt->bindParam(3, $size);
            $stmt->bindParam(4, $name);
           // $stmt->bindParam(4, $name);// comment it
            $stmt->bindParam(5, $_SESSION['user_id']);
    

    查看Update query syntax

    【讨论】:

    • 现在没有错误,但仍然没有更新。我一定是把用户 ID 弄错了。
    • 是的,请检查您的会话 ID!确保您的页面顶部有开始会话!
    • 大声笑 :) 我确定我做到了。但我想我引用不正确。
    • 能帮我拿到身份证吗?我一直在看手册,但就是找不到
    • 是啊!使用您的相关代码发布有关您的身份问题的新问题!
    【解决方案2】:

    您的更新 SQL 查询语法错误。如下更改您的查询:

    发件人:

    $stmt = $dbh->prepare("UPDATE users (image_type,image, image_size, image_name) VALUES (?,?,?,?) WHERE user_id=?");
    

    改为:

    UPDATE `users`   
       SET `image_type` = ?,
           `image` = ?,
           `image_size` = ?,
           `image_name` = ? 
     WHERE `user_id` = ?
    

    现在就试试!!!!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多