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 に答える