0

次のphpクエリがあります...

INSERT INTO `demographic2` (id, name, first_name, last_name, link, username, birthday, gender, relationship_status, email, timezone, locale, verified, updated_time) VALUES (845450180, Liam Gallagher, Liam, Gallagher, http://www.facebook.com/lia.co.uk, lia.co.uk, 11/25/1989, male, Single, gal@hotmail.com, 1, en_US, 1, 2012-03-30T21:54:17+0000)

エラーは表示されませんが、何らかの理由で上記がテーブルにデータを挿入しません。スキーマは次のようになります...

ここに画像の説明を入力

文字列リテラルに関しては、これを挿入クエリとして使用しています。引用符を追加するにはどうすればよいですか?

$columns = implode(", ",array_keys($userInfo));
            $escaped_values = array_map('mysql_real_escape_string', array_values($userInfo));
            $values  = implode(", ", $escaped_values);
            $sql = "INSERT INTO `demographic2` ($columns) VALUES ($values)";
4

6 に答える 6

2

""文字列値をor''でラップする必要があり"value"ます'value'

また、 http://www.unixwiz.net/techtips/sql-injection.htmlで、SQL クエリ文字列をより適切に作成するためのアンチ SQL インジェクション手法についても読むことができます。

于 2012-04-07T14:05:49.010 に答える
2

MySQL の文字列リテラルについて読んでください。文字列は引用符で囲む必要があります。例: "my text".

于 2012-04-07T14:02:31.410 に答える
1

何も引用されていません。

INSERT INTO `demographic2` (id, name, first_name, last_name, link, username, birthday, gender, relationship_status, email, timezone, locale, verified, updated_time)
VALUES (845450180, "Liam Gallagher", "Liam", "Gallagher", "http://www.facebook.com/lia.co.uk", "lia.co.uk", "11/25/1989", "male", "Single", "gal@hotmail.com", "1", "en_US", "1", "2012-03-30T21:54:17+0000")

また、日付 (誕生日) に DATE 列を使用しないのはなぜですか?

于 2012-04-07T14:06:23.410 に答える
1

', '2 回目の使用では、接着剤として implode() に囲むことができるため、次のようになります。

$columns = implode(", ",array_keys($userInfo));
            $escaped_values = array_map('mysql_real_escape_string', array_values($userInfo));
            $values  = implode("', '", $escaped_values);
            $sql = "INSERT INTO `demographic2` ({$columns}) VALUES ('{$values}')";
于 2012-04-07T14:07:48.033 に答える
1

追加する必要があると思います'SomevarcharOrDatetime'

INSERT INTO `demographic2` 
(
  id, name, 
  first_name, 
  last_name, 
  link, 
  username, 
  birthday, 
  gender, 
  relationship_status, 
  email, 
  timezone, 
  locale, 
  verified, 
  updated_time
) 
VALUES 
(
  845450180, 
  'Liam Gallagher', 
  'Liam', 
  'Gallagher', 
  'http://www.facebook.com/lia.co.uk', 
  'lia.co.uk', 
  '11/25/1989', 
  'male', 
  'Single', 
  'gal@hotmail.com', 
  1, 
  'en_US', 
  1, 
  '2012-03-30T21:54:17+0000'
)
于 2012-04-07T14:03:48.763 に答える
0

カスタム関数を使用して各値をマップし、一重引用符をエスケープ文字列に適用します。

$columns = implode(", ",array_keys($userInfo));
$escaped_values = array_map('escape_inpt_string', array_values($userInfo));
$values  = implode(", ", $escaped_values);
$sql = "INSERT INTO `demographic2` ($columns) VALUES ($values)";

function escape_inpt_string($val) {
  return "'".mysql_real_escape_string($val)."'";
}

乾杯!!

于 2012-04-07T14:18:03.677 に答える