-1

我通过 URL 获取图像,需要适应缩略图并调整其大小并将其存储在 BLOB MySql 中以供多个用户进一步访问(建议不将图像存储在 BLOB 中不适合这里)。我使用 GD 类进行转换。

问题是当我尝试将其保存在 BLOB 列中时,我收到以下错误消息:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在 'Вў|ö³Ÿ}æ™gВѕГёГ.../~Г«[߇Þû*ВЌ1ГћГ»)IFГ±aIhВґГ„4В(Г …В«jВїГџГЇГ·Г»' 在第 1 行`

    $im = fill_image_png($link) ;  // GD library work 
       // get the image into the buffer from the image identifier   
    ob_start();
    imagepng($im);
    $stringdata = ob_get_contents(); // read from buffer
    ob_end_clean(); // delete buffer
    $zdata = gzdeflate($stringdata);
    $zdata = mb_convert_encoding ($zdata, "utf-8");
       //store into mysql db
    if (insert_image($_db, $table_name, $item['link'],  $zdata ) ) { echo "<em><strong>Image is stored into DB</em></strong><br/>"; }
    else  { echo "Failed to store image as binary<br/>"; }

存储过程的代码是:

function insert_image($db_handler, $table_name, $link, $image) {
mysqli_query($db_handler,"UPDATE {$table_name} SET Thumbnail = '{$image}' WHERE Link = '{$link}' " );
}

Thumbnail' column is of aMEDIUMBLOB` 类型。

出了什么问题/遗漏了什么?

4

1 回答 1

0

我得到了使用 mysqli_stmt 将参数传递给 sql 查询的正确答案。这既可以避免注射'; delete from {$tablename};,也不需要'逃避:

    function insert_image($db_handler, $table_name, $link, $image) {
     $stmt = mysqli_prepare($db_handler, "UPDATE {$table_name} SET Thumbnail = ? WHERE Link = '{$link}' " );
     mysqli_stmt_bind_param($stmt, 's', $image);// whether 's' or 'b' - no avail

// execute prepared statement 
     if ( !mysqli_stmt_execute($stmt) ) 
    {  echo "Error inserting image into <em><strong>{$table_name}</strong></em>: " . mysqli_error($db_handler) ;
        echo "<br/>";
        mysqli_stmt_close($stmt);
        return False; 
    }
     mysqli_stmt_close($stmt); // close the stmt
        return True;
}   

现在没有出现 SQL 错误,但blob 字段保持不变(我检查了 PHPMyAdmin)。变量中的数据$image并不大,能够放入BLOB。怎么了?

于 2013-01-28T08:06:04.977 回答