0

このコードを Java から php に複製しようとしていますが、行/列の内容を取得する方法が正確にわかりませんか?

これはJavaコードです:

ResultSet resultsRS = statement.executeQuery("select distinct snum from shipments where quantity >= 100");

int rowCount=0;

while(resultsRS.next()){
    statement2.executeUpdate("UPDATE suppliers SET status = status + 5 WHERE snum = "+"\""+resultsRS.getString(1)+"\"");
    rowCount++;  
}

これまでのところ、私はphpでこれを持っています:

$result2 = mysqli_query($database,"select distinct snum from shipments where quantity >= 100");

$rowCount = 0;

foreach($result2 as $shipment){
    mysqli_query($database,"UPDATE suppliers SET status = status + 5 WHERE snum = "."\"".$shipment."\"");
    rowCount++;
}

ただし、これは意図したとおりには機能しません。

また、更新する特定の列が 1 つであることに気付いた場合も同様です。

編集:動作するようになりました

読んでいるすべての人にとって、次のコードで私が望むものを得ることができました:

for($counter=0; $row = mysqli_fetch_row($result2);$counter++){              
   foreach($row as $key=> $value){  
       mysqli_query($database,"UPDATE suppliers SET status = status + 5 WHERE snum = "."\"".$value."\"");
       $rowCount++;
   }                            
}
4

3 に答える 3

0

このようなケースを処理するための "ベスト プラクティス" ソリューションは、最初にループの外側でクエリを "準備" し、次にループ中にパラメータをクエリにバインドすることです。これにより、SQL インジェクションが回避されます。この特定のケースでは問題にならないかもしれませんが、クエリに直接データを挿入するのではなく、常にパラメーター バインディングを使用することを実践することをお勧めします。また、ナンセンスな引用がなくても、はるかに見栄えがよく、理解しやすくなっています:)

$result2 = mysqli_query($database,"select distinct snum from shipments where quantity >= 100");
$query = mysqli_prepare($database, 'UPDATE suppliers SET status = status + 5 WHERE snum = ?');
// Check for errors. This is obviously not the right way to handle this when going into production...
if(!$query) {
    var_dump(mysqli_error($database));
    die();
}
foreach($result2 as $shipment){
    $snum = $shipment['snum'];
    $query->bind_param('s', $snum);
    $query->execute();
    $rowCount++;
}

最初にすべての ID を収集してから、ID のバッチ全体に対して 1 つの更新ステートメントを発行することで、これを最適化することもできます。

さらに、単一のクエリを使用してこれを実行し、結合で更新を実行できると期待しています...したがって、パフォーマンスが考慮される場合は、それも検討することをお勧めします.

于 2013-08-02T08:33:01.750 に答える