Php 为什么mysql insert语句没有';不行?
我正在尝试将图像插入名为“img”的longblob类型字段中:Php 为什么mysql insert语句没有';不行?,php,mysql,Php,Mysql,我正在尝试将图像插入名为“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
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!");
编辑:我收到以下错误:“无法执行查询”
如何插入图像?提前谢谢 这是因为您将图像数据直接插入到查询文本中,这可能会导致一系列问题
改用。正如Dai所暗示的,这样做更安全。您的POST值没有正确插值。您不应该使用插值或连接来构建查询。下面是如何编写一个防止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\u id
,请尝试使用。关于您的查询:没有任何post数据会解析到查询中,因为您只是在编写它。您需要在{$var}
中连接值或包装变量。另外,$\u POST
中的键应该用单引号括起来。例如:$\u POST['vendor\u id']代码>
使用mysqli_prepare()
和mysqli_bind_param()
进行功能更强大、更安全的查询
关于MySQL中的图像,您可以这样做,但不推荐这样做。查看更多关于它的信息 SQL注入啊…目前正在发生什么?有错误吗?我得到的错误是“无法执行查询”,技术上这不是错误-这是您的消息。错误消息将至少包含已发生情况的描述。我不确定您正在尝试执行的操作。您将二进制图像数据视为字符串,并试图将其插入数据库中的字段中(请注意,转义数据可能会使其无法使用)。除了SQL注入的问题(如果有人发布的代码会破坏您的查询,并执行其他恶意操作,会发生什么情况?),还有二进制数据的问题,您只是直接将其插入查询中,可能会导致查询中断。另外,您可能应该单独上传图像,并将图像的位置存储在数据库中。