0

嗨,我正在使用下面的代码,并且已经通过了很多次,但看不出为什么这不起作用,我认为这只是无法看到问题的情况,所以我将不胜感激如果其他人可以查看并确定问题。

这是我得到的错误;

You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near
'Azur', 'Antibes', '43.5624', '7.1278', '', '', 'Europe/Paris', 'EU', '', 'Amadeu'
at line 6

这是代码:

  if (!isset($params['i'])) $params['i'] = '82.150.248.29';

  $query = 'https://geoip.maxmind.com/e?' . http_build_query($params);

  $omni_keys = 
  array(
    'country_code',
    'country_name',
    'region_code',
    'region_name',
    'city_name',
    'latitude',
    'longitude',
    'metro_code',
    'area_code',
    'time_zone',
    'continent_code',
    'postal_code',
    'isp_name',
    'organization_name',
    'domain',
    'as_number',
    'netspeed',
    'user_type',
    'accuracy_radius',
    'country_confidence',
    'city_confidence',
    'region_confidence',
    'postal_confidence',
    'error'
    );

   $curl = curl_init();
   curl_setopt_array( $curl, 
               array(
                     CURLOPT_URL => $query,
                     CURLOPT_USERAGENT => 'MaxMind PHP Sample',
                     CURLOPT_RETURNTRANSFER => true
                     )
               );

               $resp = curl_exec($curl);

               if (curl_errno($curl)) {
               throw new Exception('GeoIP Request Failed');
               }

            $omni_values = str_getcsv($resp);
            $omni = array_combine( $omni_keys, $omni_values);

           //print_r($omni_values);

          $country_code= $omni['country_code'];
          $country_name= $omni['country_name']; 
          $region_code= $omni['region_code']; 
          $region_name= $omni['region_name']; 
          $city_name= $omni['city_name']; 
          $latitude= $omni['latitude']; 

          $longitude= $omni['longitude'];
          $metro_code= $omni['metro_code']; 
          $area_code= $omni['area_code']; 
          $time_zone= $omni['time_zone']; 
          $continent_code= $omni['continent_code']; 
          $postal_code= $omni['postal_code']; 

          $isp_name= $omni['isp_name'];
          $organization_name= $omni['organization_name']; 
          $domain= $omni['domain']; 
          $as_number= $omni['as_number']; 
          $netspeed= $omni['netspeed']; 
          $user_type= $omni['user_type']; 

          $accuracy_radius= $omni['accuracy_radius'];
          $country_confidence= $omni['country_confidence']; 
          $city_confidence = $omni['city_confidence']; 
          $region_confidence= $omni['region_confidence']; 
          $postal_confidence= $omni['postal_confidence']; 
          $error= $omni['error'];

          //Insert to MasterTable
          mysql_query("INSERT INTO mastertable 
          (country_code, country_name, region_code, region_name, city_name, latitude,           longitude, metro_code, area_code, time_zone, continent, postal_code, isp_name, organisation, domain_name, as_number, netspeed, user_type, accuracy_radius, country_confidence_factor, city_confidence_factor, region_confidence_factor, postal_code_confidence_factor, error) 

        VALUES

        ('$country_code', '$country_name', '$region_code', '$region_name', '$city_name', '$latitude', '$longitude', '$metro_code', '$area_code', '$time_zone', '$continent_code', '$postal_code', '$isp_name', '$organization_name', '$domain', '$as_number', '$netspeed', '$user_type', '$accuracy_radius', '$country_confidence', '$city_confidence', '$region_confidence', '$postal_confidence', '$error' ) ") 
or die(mysql_error());
4

4 回答 4

5

这是因为您需要在插入之前转义数据!例如,您似乎尝试插入'cotes d'azur''incotes d'azur没有转义

于 2013-04-18T11:39:44.700 回答
2

更改以下所有(类似)语句:

$country_code= $omni['country_code'];

对此:

$country_code= mysql_real_escape_string( $omni['country_code'] );
于 2013-04-18T11:38:36.777 回答
0

使用后

 $omni = array_combine( $omni_keys, $omni_values);

添加这一行

 $omni = array_map('addslashes', $omni);

它会解决你的问题

见 mysql_real_escape_string 以及。

于 2013-04-18T11:47:54.100 回答
0

好吧,这个问题似乎得到了正确的回答,但无论如何:

为什么...您将数组的每个命名成员分配给具有相同名称的变量?这可能不是最佳实践。

于 2013-04-18T11:49:43.110 回答