MySQL将更新参数视为一列

时间:2011-06-25 13:10:51

标签: php mysql

我有一个包含以下代码的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'

从表单输入商店作为输入。

什么可能导致这种情况,如何阻止它?

此致

3 个答案:

答案 0 :(得分:1)

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

另一个重要问题:您说这些信息来自表单。查找SQL注入和查询卫生!

答案 1 :(得分:1)

使用PDO,参数化查询或某种ADO抽象层。

你正在做的事情很容易出现像SQL Injection这样的漏洞,以及你刚刚得到的错误。当然,解决这个问题的最简单方法是在值周围放置撇号,因为从逻辑上讲,SQL字符串现在看起来像这样:

....
`listingDisplay` = some value without quotes

当然,MySQL服务器会告诉你没有名为'some'的列,并且你缺少逗号,实际上你在值周围缺少撇号。

`listingIsFeatured` = '$is_featured', `listingDisplay` = '$display'

答案 2 :(得分:-1)

使用''作为

等变量

“更新tbl_p2e_place

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