Foreach diziler kullanarak php ile mysql içine birden fazla satır eklemek

3 Cevap php

Im sıkışmış, şimdi 2 saat boyunca bu anlamaya çalışıyorum. Ben foreach döngü anladım, ama şimdi veri eklemek için nasıl çözemiyorum.

burada benim php ben yanlış yapıyorum, değil mi?

    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ";  
foreach($_POST as $key => $value) {
    $query .= "$thumb_path,$image_path,$main_image,$_POST[project_id])";
    $result = mysql_query($query, $connection);
}

Teşekkürler!

Ben bu gibi düzenlemek gerekir, üzgünüm hala bir acemi nasıl çalıştığını foreach ve.

foreach($_POST as $key => $value) {
    $query = "INSERT INTO images VALUES (thumb_path, image_path, main_image, project_id),";  
    $query .= "$value[thumb_path], $value[$image_path], $value[$main_image], '$_POST[project_id'])";
}

$result = mysql_query($query, $connection);

3 Cevap

Yanlış burada birkaç şey:

  1. Siz değerleri listenizde bir açılış desteğini eksik sonra (VALUES)
  2. Sen mysql_query foreach her yineleme üzerinde çalışıyor. Bunun yerine, muhtemelen (çoklu değerler listelerini kullanarak) ilk dizesi oluşturmak ve döngü dışında mysql_query çalıştırmak istiyorum.
  3. Eğer bu şekilde bir dizeye $_POST['project_id'] değişkeni katmak olamaz
  4. Sen veritabanına koymadan önce $_POST veri kaçmak gerekir!
  5. Sen aslında sorgu içinde foreach gelen $key veya $value kullanarak değil, sadece bunu atarak ediyoruz.
  6. Döngü içinde değişkenler ($thumb_path vb) döngü böylece her zaman aynı veri eklemek için gidiyoruz her yineleme için aynı olacaktır.
  7. Döngünün mantığı sadece mantıklı değil. Sen $_POST, ya da ne olmuş olabilir ne kadar bilmiyorum, neden üzerinde döngü vardır $_POST?

Tüm bu gidermek için bazı ipuçları:

  1. Hata günlüğünü denetleyin.
  2. var_dump SQL dize bunu sözdizimsel ve mantıken doğru olup olmadığını kontrol etmek için sorguyu çalıştırmadan önce.

Daha fazla yardım istiyorsanız, ben var_dump $_POST, sorgu gibi bakmak gerektiğini, ve daha sonra burada hem yayınlamak ne düşündüğünüzü yazmak için deneyin ne olduğunu size öneririm. Sonra belki birisi bir diğerine gitmek yardımcı olacaktır.

İlk olarak, mysql_real_esape_string ile $ _POST [project_id] kaçarlar.

Ardından, syntax (...), masa VALUES (...) INSERT INTO

Bu yaptığın gibi tekrarlanan bir dize birleştirme daha korumak için çok daha kolay gibi bir şey bulmak:

$values = array();
foreach ($_POST as $key => $value) {
    $qvalue = mysql_real_escape_string($value);
    $values[] = "($field1, $field2, $field3, $qvalue)"; // quoted value, not the raw value
}

$query_values = implode(',', $values);

$query = "INSERT INTO images (field1, field2, field3, field4) VALUES $query_values";
$result = mysql_query($query, $connection);

Sadece böyle bir sorgu oluştururken, bunu birden fazla küçük sorguları içine insert bölünmüş olurdu bu durumda max_packet uzunluğunu, hariç için yeterince büyük bir sorgu oluşturmak için tamamen mümkün olduğunu unutmayın.