Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么mysql insert语句没有';不行?_Php_Mysql - Fatal编程技术网

Php 为什么mysql insert语句没有';不行?

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

我正在尝试将图像插入名为“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!");
编辑:我收到以下错误:“无法执行查询”


如何插入图像?提前谢谢

这是因为您将图像数据直接插入到查询文本中,这可能会导致一系列问题


改用。正如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注入的问题(如果有人发布的代码会破坏您的查询,并执行其他恶意操作,会发生什么情况?),还有二进制数据的问题,您只是直接将其插入查询中,可能会导致查询中断。另外,您可能应该单独上传图像,并将图像的位置存储在数据库中。