2

今朝、insert ステートメントで少し問題が発生しました。はい、非推奨の mysql_query 関数を使用しています。私の挿入ステートメントは次のようになります。

$query3 = "INSERT INTO ".$db_prefix ." offer_det 
          (fname, lname, 10k, 14k, 18k, 21k, 22k, 24k, 925, coins, bars) 
           VALUES '".$fname."', '".$lname."', '".$_10k."', '".$_14k."', 
                  '".$_18k."', '".$_21k."', '".$_22k."', '".$_24k."', 
                  '".$_925."', '".$coins."', '".$bars."')";

$result3 = mysql_query($query3);

私のPHPフォームの値は、挿入ステートメントの最初の部分「fname」などにリストされているすべての変数です.

私の変数は投稿からプルするように設定されており、挿入に入る値としてリストされています。

開始する前に変数をアンダースコアに変更する必要がありました.PHPはそれを好まなかったと思います.

私の質問:

  1. これらの 10k、14k などは、mysql テーブルの行名で問題ありませんか?
  2. ここで見逃している問題はありますか?

とのデータ型は varchar でfnamelname10k からバーまでは 10 進数 (7,3) です。

4

4 に答える 4

6

列名925は、バッククォートを使用して引用する必要があります。

(`fname`, `lname`, `10k`, `14k`, `18k`, `21k`, `22k`, `24k`, `925`, `coins`, `bars`) 

今後同様の問題が発生しないように、列名を別の名前に変更することも検討してください。

于 2012-10-19T11:21:23.977 に答える
1

MySQLスキーマオブジェクト名925に従って、列名を引用する必要があります

正しく:

$query3 = "insert into ".$db_prefix."offer_det (fname, lname, 10k, 14k, 18k, 21k, 22k, 24k, `925`, coins, bars)
values 
('".$fname."', '".$lname."', '".$_10k."', '".$_14k."', '".$_18k."', '".$_21k."', 
'".$_22k."','".$_24k."', '".$_925."', '".$coins."', '".$bars."')"; 

別の推奨事項:SQLインジェクションは経験するのが厄介なことなので、着信文字列をエスケープする必要があります...

于 2012-10-19T11:23:52.590 に答える
0

次のようにQUERYを使用します。

$query3 = "insert into ".$db_prefix."offer_det (fname, lname, 10k, 14k, 18k, 21k, 22k, 24k, 925, coins, bars) 
       values ('$fname', '$lname', '$_10k', '$_14k', '$_18k', '$_21k', '$_22k', 
       '$_24k', '$_925', '$coins', '$bars')";
$query_exec=mysql_query($query3) or die(mysql_error());

また、変数を挿入するには、単一のコードのみを使用する必要があります。

于 2012-10-19T11:26:49.367 に答える
0

大胆に実装の変更を提案できますか?

/// put your vars in an easier to use format
$insert = array(
  'fname' => $fname,
  'lname' => $lname,
  '10k' => $_10k,
  /* and so on ...*/
);

/// considering you are using mysql_query, use it's escape function
foreach ( $insert as $field => $value ) {
  $insert[$field] = mysql_real_escape_string($value);
}

/// pull out the keys as fields and the values as values
$keys = array_keys($insert);
$vals = array_values($insert);

/// the following should auto backtick everything... however it should be
/// noted all the values will be treated like strings as you were doing anyway
$query = "INSERT INTO `" . $db_prefix . "offer_det` " . 
         "(`" . implode('`,`', $keys) . "`) " . 
         "VALUES ('" . implode("','", $vals ) .  "')";
于 2012-10-19T11:27:08.113 に答える