Temelleri ilişkisel MySql tablo için UPDATE deyimi ilgili kurallar: vs için ise

3 Cevap php

Ben mysql ve php ile ilk adımları yapıyorum, bu yüzden doğru kod optimizasyonu için foundamental kurallara şüphelerim var.

Ben bir ilişkisel masaya idam edilmelidir çünkü benim UPDATE ifadesi, satır belirli sayıda idam edilmesi gereken bir durum var, bu yüzden doğru bir cicle için?

<?
// connection already created
$data[] = array ("id" => 54, "enabled" => 1);
$data[] = array ("id" => 33, "enabled" => 0);
$data[] = array ("id" => 12, "enabled" => 0);
$data[] = array ("id" => 58, "enabled" => 0);
$data[] = array ("id" => 21, "enabled" => 1);
$data[] = array ("id" => 10, "enabled" => 1);
$data[] = array ("id" => 18, "enabled" => 0);
$data[] = array ("id" => 32, "enabled" => 1);
$data[] = array ("id" => 84, "enabled" => 0);
$data[] = array ("id" => 80, "enabled" => 1);

for (var $i = 0; $i < count ($data); $i ++) {

    $id = $data[$i]["id"];
    $enabled = $data[$i]["enabled"];

    $sql = "UPDATE users SET user_enabled = '$enabled' WHERE user_id = '$id' LIMIT 1;";
    $res = mysql_query ($sql);
    $num = mysql_num_rows ($res);

}


?>

Should I use a while or a for loop? Is this code valid for multiple UPDATEs or does exist something better like specific queries for this kind of action?

3 Cevap

Çeşitli yorumlar:

  • Döngünün her tekrarında count($data) hesaplanıyor gereksiz bir maliyet. count($data) de döngü başlar ve down saymak, ya da başka anlaşılacağı Ignacio @ gibi kullanmak foreach. Ya

  • Bu parametreler ile hazırlanmış bir sorgu kullanmak bir yararı olacağını büyük bir örnektir. Ama bu özellik, PHP'nin düz mysql uzantısı desteklenmez. Mysqli veya tercihen PDO kullanmak gerekir.

  • Bir SQL ifadesinde tamsayı değerler etrafında tırnak koymak zorunda değilsiniz.

  • mysql_num_rows() bir UPDATE sorgu için anlamsızdır. Muhtemelen kullanmak gerekiyordu mysql_affected_rows().

  • I user_id users tablonun birincil anahtar olduğunu tahmin ediyorum beri, bu sorguda LIMIT kullanmak ve bu nedenle olur neden bilmiyorum Zaten birden fazla satır güncellemek asla.

İşte ben bu kodu yazmak nasıl olduğunu:

<?php
// PDO connection already created
$data[] = array ("id" => 54, "enabled" => 1);
...etc...

$sql = "UPDATE users SET user_enabled = :enabled WHERE user_id = :id";
$stmt = $pdo->prepare($sql);

foreach ($data as $parameters) {

    $success = $stmt->execute($parameters);
    $num = $stmt->rowCount();

}


?>