2017-02-10 10 views
0

は、私は、このリンクON UPDATE DUPLICATE KEYに構文エラーがありますか?

SQL - IF EXISTS UPDATE ELSE INSERT INTO

以下、初めてのON UPDATE DUPLICATE KEY句を使用しようとしていたと私は私のSQL構文でエラーが取得しています:

SQLSTATEを[ 42000]:構文エラーまたはアクセス違反:1064 SQL構文に エラーがあります。あなたの MySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が「AJAY KUMAR」の近くで使用するようにしてください) ' 2行目で実行されているSQLは、INSERT INTO fee_acc_balance (guardian_name、account_no、paid_amount、due、days_overdue、重複キー更新時にguardian_name = VALUE( 'AJAY KUMAR'、 '0'、12550、0、 12550、 '2017-02-10 21:28:05' 「)エラー情報:配列([0] => 42000 [1] => 1064 [2] =>あなたはエラーを持っている...

私の場合は一意のキーはaccount_noであり、これは私ですsql:

INSERT INTO fee_acc_balance (guardian_name, account_no, paid_amount, due, days_overdue, total_fees, updated_on) 
VALUES ('$father_name', '$account->account_no', $payments, $sum, 0, $sum,'$now') 
ON DUPLICATE KEY UPDATE guardian_name = VALUES ('$father_name') 

エラーはどこにありますか?

ON DUPLICATE KEY UPDATE guardian_name = VALUES ('$father_name') 

は、割り当ての右側の部分がVALUESから入ってくる新しいフィールドがあることを

ON DUPLICATE KEY UPDATE guardian_name = VALUES(guardian_name) 

お知らせして試してみて、左側:

+0

あなたの質問に変数定義を追加できますか? $ father_nameはどこから来たのですか? – Nathan

+0

これはリンゴが熟しているかどうかを尋ねているかのように聞こえますが、私は2つのリンゴと3つのリンゴの合計を求めます:)しかし、あなたが答える前に知っていなければならない場合、$ father_nameは別のデータベース呼び出しから来ています。上記のすべての変数は、さまざまなデータベースや関数呼び出しで計算されています。私は彼らがこの質問に答えることは不必要であると確信しています。私に情報を伝えれば十分です。 –

答えて

2

あなたはON DUPLICATE KEY UPDATEで絶対値を指定することはできません現存する記録です。 "UPDATE a = VALUES(a)"は、 "そのままVALUESをレコードに入れる"ことを意味し、 "そのまますべてを残す"という意味ではありません。 、より良いまだ、bound parameters

$stmt->prepare("INSERT... VALUES(?, ?, ?, ?, 0, ?, ?)"); 
$stmt->execute([ 
    $father_name, 
    $account->account_no, 
    $payments, 
    $sum, 
    $sum, 
    $now 
]); 

と:

...VALUES ('{$father_name}', '{$account->account_no}', {$payments}, {$sum}, 0, {$sum}, '{$now}') 

またはより良いPDOでPREPARE D文を使用します。

また、あなたは、中括弧内の変数を書きたいことがあります。

ガーディアン名がAjay Al'Kumar(引用符に注意)または整数値の代わりに文字列値が渡されると、奇妙なことが起こります。

+0

私が理解できないことは、mysqlにguardian_nameが$ father_nameであることをどこで伝えるのですか? VALUES($ father_name)ではなくON DUPLICATE KEY UPDATE文で 'VALUES(guardian_name)'を書くと、mysqlは自動的にinsert文から値を選択しますか? –

+1

する必要はありません。あなたはguardian_nameに$ father_nameを挿入しようとしているので、MySQLはすでにVALUES(guardian_name)が 'AJAY KUMAR'であることを知っています。ですから、VALUES(guardian_name)は 'guardian_name'(フィールド)に入る必要があります。 – LSerni

+0

複数の列の値を一度に入力することはできますか?例えば'重複キーアップデート(guardian_name、account_no、blah、blah-blah)VALUES(guardian_name、account_no、blah、blah-blah)'。この方法はうまくいきません。どうすればいいのですか? –

関連する問題