0

INSERT INTO On Duplicate Key UPDATEフォーム入力にどのように使用しますか? 私がオンラインで見つけたすべての例は、カウンターまたは所定の値を使用しています。

UPDATE標準とメソッドを使用してコードを機能させることができました (非常に役立つメンバーのおかげです)SETが、私のテーブルではINSERT INTO On Duplicate Key UPDATE.

'user_id'すべてのテーブルで一意の主キーであり、account テーブルを除くすべてのテーブルで外部キーです。

<?php
session_start();  
require_once('config.php'); 
require_once('open_db.php');     

$setlist='';
foreach ($_POST as $key=>$value) {
  $setlist.=$key .'=\''.$value.'\',';
}

$setlist=substr($setlist, 0, -1);
$user_id=$_SESSION['SESS_USER_ID'];  
$sql='UPDATE style_test SET '.$setlist.' WHERE user_id='.$user_id;

if (!mysql_query($sql,$con)) {
  die('Error: ' . mysql_error());
}         
?>

すべてのフィールドを自動的に挿入するために以前使用していたコードは次のとおりです。

$fieldlist=$vallist='';
foreach ($_POST as $key => $value) {
  $fieldlist.=$key.',';
  $vallist.='\''.urlencode($value).'\',';
}
$fieldlist=substr($fieldlist, 0, -1);
$vallist=substr($vallist, 0, -1);

$user_id=$_SESSION['SESS_USER_ID'];
$fieldlist.=', user_id';
$vallist.=','.$user_id;

$qry='INSERT INTO style_test1 ('.$fieldlist.') VALUES ('.$vallist.')';
4

2 に答える 2

2

構文ハイライトは、問題がどこにあるかを示します。

$sql='UPDATE style_test SET ;.$setlist.' WHERE user_id='.$user_id;
                            ^
                            Here

これは一重引用符である必要があります。

$sql='UPDATE style_test SET '.$setlist.' WHERE user_id='.$user_id;

また、これらのmysql_*関数は非推奨であり、使用しないでください。また、元のコードはSQLインジェクションに対して広く開かれています。

重複キーの更新の場合は、それをSQLクエリに追加し、その後column = valueに更新するすべてのフィールドを追加します。

$sql='INSERT INTO style_test SET ' . $setlist.' WHERE user_id = ' . $user_id. ' ON DUPLICATE KEY UPDATE ' . $setlist;
于 2012-07-25T16:32:28.870 に答える
0

フォーム入力をエスケープしていることを確認してください。現時点では、SQL インジェクションに対して無防備です。少なくとも mysql_real_escape_string のようなものを使用するか、または is_numeric を使用して、数値が SQL ではなく数値であることを確認してください。ユーザーが入力したものをすべて取得してDBを公開しているため、非常に危険なコードです。

于 2012-07-25T17:47:05.640 に答える