我正在尝试将图像插入名为'img'的longblob类型字段中:
include('config.php');
$imgData = mysqli_real_escape_string($conn, file_get_contents($_FILES['im_age'] ['tmp_name']));
$qry=" insert into tblproducts(
vendorid, prefix, overallsize, handlematerial, img, code, itemcost, shippingcost,
profitpercentage, discountpercentage, caption, availability, quantity
)
values(
$_POST[vendor_id],
$_POST[pre_fix],
$_POST[overall_size],
$_POST[handle_material],
$imgData,
$_POST[co_de],
$_POST[item_cost],
$_POST[shipping_cost],
$_POST[profit_percentage],
$_POST[discount_percentage],
$_POST[cap_tion],
$_POST[avail_ability],
$_POST[quan_tity]
)
";
$result = mysqli_query($conn, $qry) or die("Could not execute query!");
编辑:我收到以下错误:“无法执行查询”
如何进行图像插入?提前谢谢!
答案 0 :(得分:2)
您的POST值未正确插值。您不应该使用插值或连接来构建查询。以下是编写prepared statement以防止SQL注入的方法:
$qry = "INSERT INTO tblproducts (
vendorid, prefix, overallsize, handlematerial, img, code, itemcost, shippingcost,
profitpercentage, discountpercentage, caption, availability, quantity
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
$stmt = mysqli_prepare($conn, $qry);
mysqli_stmt_bind_param($stmt, 'sssssssssssss',
$_POST['vendor_id'],
$_POST['pre_fix'],
$_POST['overall_size'],
$_POST['handle_material'],
$imgData,
$_POST['co_de'],
$_POST['item_cost'],
$_POST['shipping_cost'],
$_POST['profit_percentage'],
$_POST['discount_percentage'],
$_POST['cap_tion'],
$_POST['avail_ability'],
$_POST['quan_tity']
);
if (!mysqli_stmt_execute($stmt)) {
echo 'Query failed.';
}
当然还有更高级的错误处理技术和使用面向对象的东西,但这应该涵盖了使查询正常工作的基础知识。
您可能已经注意到查询中的问号参数。 MySQLi不支持命名参数。如果您希望在查询中使用命名参数,例如:vendor_id
,请尝试使用PDO。
答案 1 :(得分:2)
关于您的查询:没有任何帖子数据会被解析到查询中,因为您只是编写它。您需要在{$var}
中连接变量或包装变量。同样,$_POST
中的键应该用单引号括起来。例如:$_POST['vendor_id'];
使用mysqli_prepare()
和mysqli_bind_param()
进行更实用,更安全的查询。
关于MySQL中的图像,您可以但不建议这样做。查看this post了解有关它的更多信息。
答案 2 :(得分:1)
这是因为您正在将图像直接重新插入到查询文本中,这可能会导致一系列问题。
请改用mysqli_prepare
and mysqli_stmt_bind_param
。正如戴暗示,这更加安全。