2016-04-06 16 views
1

Çeşitli etkenlere bağlı olarak bir SQL ekleme veya güncelleme komut dosyası oluşturan bir komut dosyası var. Aşağıda bu üretiyor komut dosyası dize değeridir: Tek bir php mysqli_query işleviyle birden çok sorgu çalıştırılıyor

INSERT INTO AAB_EVENT_SHIFTS (EVENT_ID ,SHIFT ,START_TIME ,END_TIME 
    ,CREATE_USER ,CREATE_DATE ,MODIFY_USER ,MODIFY_DATE) VALUES (6 ,1 
    ,STR_TO_DATE('04/01/2016 10:00 am', '%m/%d/%Y %I:%i %p') 
    ,STR_TO_DATE('04/01/2016 11:00 am', '%m/%d/%Y %I:%i %p') ,14 ,now() ,14 ,now() 
    ); INSERT INTO AAB_EVENT_SHIFTS (EVENT_ID ,SHIFT ,START_TIME ,END_TIME ,CREATE_USER ,CREATE_DATE ,MODIFY_USER ,MODIFY_DATE) VALUES (6 ,2 ,STR_TO_DATE('04/01/2016 11:00 am', '%m/%d/%Y %I:%i %p') ,STR_TO_DATE('04/01/2016 12:00 pm', '%m/%d/%Y %I:%i %p') ,14 ,now() ,14 ,now()); 
INSERT INTO AAB_EVENT_SHIFTS (EVENT_ID ,SHIFT ,START_TIME ,END_TIME ,CREATE_USER ,CREATE_DATE ,MODIFY_USER ,MODIFY_DATE) VALUES (6 ,3 
,STR_TO_DATE('04/01/2016 12:00 pm', '%m/%d/%Y %I:%i %p') 
,STR_TO_DATE('04/01/2016 1:00 pm', '%m/%d/%Y %I:%i %p') ,14 ,now() ,14 ,now()); 

Ben veritabanına bağlı bir sql editörü mükemmel iyi çalışır ve beklenen tüm satırları eklediğini çalıştırırsanız

. Ancak thusly bu sorguyu çağrılırken:

$result = mysqli_query($link,$query); 

echo mysqli_error($link); 

döner bu: Ben sorgu sorguları bir dizi oluşturma ve bunları çalıştıran birden çok sorguları birleştirilmiş dize oluşturmasını üretir şeklini değiştiren

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO AAB_EVENT_SHIFTS (EVENT_ID ,SHIFT ,' at line 24

her seferinde - bu sorunu düzeltmiş gibi görünüyor.

 for($i=1;$i<=$event->total_shifts($event_id);$i++) { 
//  echo $event->shift_exists($event_id,$i).'-'.$i.'::<P>'; 
     if($event->shift_exists($event_id,$i)) { 
      $query[$i] = 
      'UPDATE AAB_EVENT_SHIFTS ' 
        . 'SET START_TIME = STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['start_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\')' 
        . ', END_TIME  = STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['end_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\')' 
        . ',MODIFY_USER  = '. get_session_user_id(session_id()) 
        . ',MODIFY_DATE  = now()' 
        . ' WHERE EVENT_ID = '.$event_id.' AND SHIFT = '.$i.'; '; 

     } else { $query[$i] = 
       ' 
     INSERT INTO AAB_EVENT_SHIFTS 
     (
     EVENT_ID 
     ,SHIFT 
     ,START_TIME 
     ,END_TIME 
     ,CREATE_USER 
     ,CREATE_DATE 
     ,MODIFY_USER 
     ,MODIFY_DATE 
     ) 
     VALUES 
     (
     '.$event_id.' 
     ,'.$i.' 
     ,STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['start_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\') 
     ,STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['end_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\')    
     ,'. get_session_user_id(session_id()) .' 
     ,now() 
     ,'. get_session_user_id(session_id()) .' 
     ,now() 
     ); 
     '; 

     } 
     } 

     $i = 1; 
     while($query[$i]) { 
     echo '<P>'.$query[$i]; 
      $result = mysqli_query($link, $query[$i]); 
      $i++; 
     echo '<P>'.mysqli_error($link); 
     } 
+1

Eğer '$ query' değişken oluşturmak nasıl göster !! – Saty

+0

$ Sorgunuzu ekleyin veya sorguyu yazdırın ve mysql ile çalıştırın. –

cevap

1

Tek bir php mysqli_query işleviyle birden fazla sorguyu çalıştıramazsınız.
Yalnızca komut dosyanızın dizisi sorguları oluşturmasını sağlayın ve ardından bunları döngü içinde tek tek çalıştırın.

+0

Bu benim yaptığım şey ve şimdi çalışıyor. Teşekkürler dostum. – Jeff

+0

mysqli_multi_query ile yapabilirsiniz? – Jester

+0

@Jester multi_query'yi kullanmak o kadar kolay değil –

0

yapabilirsiniz sorguları aracılığıyla döngü ya ya tek fonksiyonu ile birden yürütmek isterseniz mysqli_multi_query fonksiyonunu kullanmak zorunda: mysqli_multi_query

+0

Neredeyse hiç kimse mysqli_multi_query'nin ne olduğunu ve nasıl düzgün kullanacağını anlayamadığından, bunun gibi aptalca bir durum için kullanılmaması şiddetle önerilir. Bir sonuç şaşırtıcı olabilir. –

+0

@YourCommonSense Sanırım, daha önce kullanmadığımı söylemeliyim ama bahsetmeye değer olabileceğini düşündüm. Bu durumda, teker teker yürütmek yerine onu kullanmak daha iyi olur mu, yoksa asla? – Jester

+0

Zaman uyumsuz sorgu yürütme gerektiğinde söyleyebilirim. Başka bir durumda, ayrı sorgu aramaları yapmak daha iyidir. –

İlgili konular