Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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将更新参数视为列_Php_Mysql - Fatal编程技术网

Php MySQL将更新参数视为列

Php MySQL将更新参数视为列,php,mysql,Php,Mysql,我有一个包含以下代码的PHP脚本: $sql = "UPDATE tbl_p2e_place SET `listingName` = $listing_name, `listingDescription` = $listing_description, `listingSpecialOffers` = $listing_special_offers, `listingFoodTypes` = $listing_food

我有一个包含以下代码的PHP脚本:

$sql = "UPDATE tbl_p2e_place

            SET 
            `listingName` = $listing_name, `listingDescription` = $listing_description, 
            `listingSpecialOffers` = $listing_special_offers, `listingFoodTypes` = $listing_food_types,
            `listingAddress` = $listing_address, `CityID` = $listing_city, 
            `listingGPSSouth` = $gps_coordinate_south, `listingGPSEast` = $gps_coordinate_east,
            `listingLatitude` = $map_latitude, `listingLongitude` = $map_longitude, 
            `listingTime` = $listing_timing, `listingNumber` = $booking_number, 
            `listingEmail` = $email_address, `listingWebsite` = $lisiting_website, 
            `listingTwitter` = $lisiting_twitter, `listingFacebook` = $lisiting_facebook, 
            `listingIsFeatured` = $is_featured, `listingDisplay` = $display

            WHERE listingID = $listing_id"; 


    if(!mysql_query($sql))
    {
        die('Update Error: ' . mysql_error());
    }

    mysql_close($con);
当我想要运行查询时,出现以下错误:

Update Error: Unknown column 'Shop' in 'field list'
已输入Shop作为表单的输入

什么会导致这种情况?我怎样才能阻止它


关于

您需要在查询中的变量周围加引号

另一个重要问题是:你说这些信息来自一个表单。查询SQL注入和查询

使用、参数化查询或某种抽象层

您所做的事情很容易出现SQL注入之类的漏洞,以及刚刚出现的错误。当然,解决这个问题的最简单方法是在值周围加上撇号,因为从逻辑上讲,SQL字符串现在看起来如下所示:

....
`listingDisplay` = some value without quotes
当然,MySQL服务器会告诉您没有名为“some”的列,并且您缺少逗号,而实际上您缺少值周围的撇号

`listingIsFeatured` = '$is_featured', `listingDisplay` = '$display'
将“”用于变量,如

“更新tbl_p2e_位置

        SET 
        `listingName` = '".$listing_name."'................and so on

我确实在通过POST和GET得到的每个值上使用mysql\u real\u escape\u string()。这没有意义,因为我可以编写一个不带引号的sql注入,它会工作,因为缺少引号。-1有关sql注入代码,请参阅: