1

配列でmysqlテーブルを更新する方法を理解しようとしています。

テーブルには、id、rate、pol_idの3つのフィールドがあります。「挿入」は完璧に機能します。

 foreach ($rates as $rn=>$rv) {
 $sql3=mysql_query("INSERT into `rates` (`rate`, `pol_id`) 
             values ( '$rv', '$polid',)") or die ("Unable to issue query sql2:   ".mysql_error()); }

$ rateは、実際には動的入力フィールドからの配列です。

だから私はこの例のようなものを手に入れます:

id  |   rate |    pol_id
=========================
1   |   5.6  |     272  
2   |   6.3  |     272 
3   |   7.9  |     272

次に、入力フィールドの値を編集したいので、テーブルを更新する必要があります。

私はこれを試しました:

foreach ($rates as $rn=>$rv) {
$sql3=mysql_query("UPDATE `rates` SET `rate`='$rv' WHERE   `pol_id`='$polid'")or die ("Unable to issue query sql3: ".mysql_error()); }

しかし、これは機能していません。すべての行を最後の値で更新します。

ypuはこれを手伝ってくれませんか?

4

2 に答える 2

3

$polid変数はforeachループ内で変更されていません。これにより、同じpol_id($ polidで指定)を持つテーブル内のすべての要素に対してwhereステートメントがtrueになります。ratesこれにより、「すべての」エントリの値(pol_id = $ polid)が、最後に入力した値($ rv)に設定されます。

レートの古い値が次のようになっていることがわかっている場合は、whereステートメントに2番目の条件を追加してみてください。

$sql3=mysql_query("UPDATE `rates` SET `rate`='$rv' WHERE   `pol_id`='$polid' AND `rate`={old_value}")or die ("Unable to issue query sql3: ".mysql_error()); }

より良い方法は、最初にクエリを実行して必要なエントリのIDを取得し、その後そのIDを更新クエリで使用することにより、レートのid列を使用することです(一意であることが保証されています)。

$query1 = mysql_query("select id from rates where {your desired condition};
/* Assign the result of $query1 to $id */
$sql3=mysql_query("UPDATE `rates` SET `rate`='$rv' WHERE   `pol_id`='$polid' AND `id` = $id)or die ("Unable to issue query sql3: ".mysql_error()); }

pol_idIDが一意であるため、='$polid'をクエリから除外することもできます。

于 2013-02-20T14:21:58.487 に答える
1

キー$rnと値$rvを使用して$ratesをループしています。

$ polidはループ中も同じままなので、すべての更新は同じ行に影響します。

于 2013-02-20T14:22:59.697 に答える