0

別のテーブルから選択した値に基づいてテーブル内のデータを更新するアプリケーションを開発しています。私はネットを検索し、自分のニーズに合うようにいくつかのサンプルを変更しようとしましたが、それでも機能しませんでした。

以下は私のコードの一部です:

$sync_2 = "
  select pin,ddt_1
  from purchases
  where (amount_to_repay-amount_repaid)>0
    and status like 'U%'
    and counter=1
";
$sync_2_res = mysqli_query($link, $sync_2);
$row = mysqli_fetch_assoc($sync_2_res);
$data = mysqli_num_rows($sync_2_res);

$i;
for ($i = 0; $i <= $data; $i++) {
  $pin = $row['pin'];
  $ddt = $row['ddt_1'];
  $sql = "
    update deductions
    set amount = '$ddt_1'
    where pin = '$pin';
  $result = mysqli_query($link,$sql);
}

何も入力されていません。ループの種類を変更する必要がありますか?

4

4 に答える 4

2

単一のクエリですべての操作を実行する必要がある次のコードを試してください。

$query = "
  UPDATE `deductions` `d`
  JOIN `purchases` `p` ON `p`.`pin` = `d`.`pin`
  SET `d`.`amount` = `p`.`ddt_1`
  WHERE
    (`p`.`amount_to_repay` - `p`.`amount_repaid`) > 0
    AND `p`.`status` LIKE 'U%'
    AND `p`.`counter` = 1
";
$result = mysqli_query($link, $query);
于 2012-04-04T12:55:16.120 に答える
1

あなたが与えたように、SQLステートメントで変数 $ddt_1 を $ddt に変更すると問題が発生する可能性があります

 for($i=0;$i<=$data;$i++)

 {
 $pin=$row['pin'];
 $ddt=$row['ddt_1];
 $sql="update
  deductions
 set amount='$ddt'
 where pin='$pin';
$result=mysqli_query($link,$sql);
    }
于 2012-04-04T12:46:47.420 に答える
0

改善された PHP の例

$mysqli = new mysqli ( "localhost", "root", "", "test" );
$sql  = "SELECT pin , ddt_1  from purchases WHERE  amount_to_repay-amount_repaid  >  0  AND  status like 'U%' AND counter = 1";
$sql2 = "update deductions  set amount = '%s'  where pin = '%s'; ";
$result = $mysqli->query($sql);
$row = null ;
while ($row = $result->fetch_assoc())
{
     $mysqli->query(sprintf ( $sql, $row ['pin'], $row ['ddt_1'] ));
}

古い投稿

交換

 $ddt=$row['ddt_1];

 $ddt=$row['ddt_1'];

交換

set amount='$ddt_1'

set amount='$ddt'

これが役立つことを願っています

ありがとう

:)

于 2012-04-04T12:48:50.160 に答える
0

最初に注意すべきことは、mysqli_fetch_assoc()が 1 つの行 (カーソルがある行) のみをフェッチすることです。次に、カーソルを 1 行上に移動します。カーソルがデータの最後に到達すると、 mysqli_fetch_assoc()はNULLを返します。

したがって、一連の結果を反復するには、これが最も適切であるため、通常はwhile ループを使用します。

$sync_2_res = mysqli_query($link, $sync_2);

if($sync_2_res == null) {
    echo "The sync2 query failed: " . mysqli_error($link);
    exit();
}

while($row = mysqli_fetch_assoc($result) {
    // do something with $row
}

また、クエリが機能し、FALSE ではなく結果が返されたことを確認することをお勧めします。

次に、2 番目のクエリにタイプミスがあると思います: $dtt_1should beです。フィールドを文字列に設定する必要がある$dttことを本当に確信していますか?amount

とにかく、これが私があなたのコードを書き直す方法です:

$sync_2= "select pin,ddt_1 from purchases "
    . "where (amount_to_repay-amount_repaid)>0 "
    . "and status like 'U%' and counter=1";

$sync_2_res=mysqli_query($link,$sync_2);

// check the query worked
if(!$sync_2_res) {
    echo "The sync2 query failed: " . mysqli_error($link);
    exit();
}

while($row = mysqli_fetch_assoc($result) {
    // do something with $row
    $pin=$row['pin'];
    $ddt=$row['ddt_1'];
    // note change from $ddt_1 to $dtt
    $sql="update deductions set amount='$ddt' where pin='$pin';";

    $result=mysqli_query($link,$sql);
    // check query worked
   if(!$result) {
      echo "The 2nd query failed: " . mysqli_error($link);
   }
}
于 2012-04-04T13:17:32.567 に答える