2016-04-01 16 views
2

Programlama ve görevlerimde parçalar elde etmeme yardımcı olması için WordPress'te bir eklenti üzerinde çalışıyorum. Bunu yapan birçok eklentinin olduğunu biliyorum. Ama WordPress'de eklenti oluşturmayı öğrenmek için yapıyorum.Wordpress SQL Hata Seçimi

Veritabanındaki bu SQL talimatı Select * From wp_jrmr_calendar Where fecha_inicio between '2016-03-01' and '2016-5-01' yapıyorum. Eşleşen 5 satırım var.

Error de la base de datos de WordPress para la consulta Select * From wp_jrmr_calendar Where fecha_inicio between '2016-03-01' and '2016-05-01' realizada por do_action('wp_ajax_search_calendar'), call_user_func_array, HostelApp\Calendar\CalendarManager->search_calendar, HostelApp\Calendar\Calendar->getCalendar.

Ben veritabanı biliyorum: Ben veritabanı üzerinde doğrudan SQL talimat yürütmek ve sonuçları verir:

<table name="wp_jrmr_calendar"> 
 
     <!-- Tabla wp_jrmr_calendar --> 
 
     <tr name="wp_jrmr_calendar"> 
 
      <td name="id">1</td> 
 
      <td name="fecha_inicio">2016-03-30</td> 
 
      <td name="hora">00:20:16</td> 
 
      <td name="duracion">1983</td> 
 
      <td name="titulo">2016-03-30</td> 
 
      <td name="descripcion">2016-03-30</td> 
 
      <td name="todo_el_dia">N</td> 
 
      <td name="tipo_evento">GENERAL</td> 
 
     </tr> 
 
     <tr name="wp_jrmr_calendar"> 
 
      <td name="id">2</td> 
 
      <td name="fecha_inicio">2016-03-30</td> 
 
      <td name="hora">08:00:00</td> 
 
      <td name="duracion">0.5</td> 
 
      <td name="titulo">dddd</td> 
 
      <td name="descripcion"></td> 
 
      <td name="todo_el_dia">N</td> 
 
      <td name="tipo_evento">GENERAL</td> 
 
     </tr> 
 
     <tr name="wp_jrmr_calendar"> 
 
      <td name="id">3</td> 
 
      <td name="fecha_inicio">2016-03-30</td> 
 
      <td name="hora">08:00:00</td> 
 
      <td name="duracion">0.5</td> 
 
      <td name="titulo">dddd</td> 
 
      <td name="descripcion"></td> 
 
      <td name="todo_el_dia">N</td> 
 
      <td name="tipo_evento">GENERAL</td> 
 
     </tr> 
 
     <tr name="wp_jrmr_calendar"> 
 
      <td name="id">4</td> 
 
      <td name="fecha_inicio">2016-03-31</td> 
 
      <td name="hora">00:00:00</td> 
 
      <td name="duracion">0.5</td> 
 
      <td name="titulo">Otra Entrada nueva</td> 
 
      <td name="descripcion"></td> 
 
      <td name="todo_el_dia">Y</td> 
 
      <td name="tipo_evento">GENERAL</td> 
 
     </tr> 
 
     <tr name="wp_jrmr_calendar"> 
 
      <td name="id">5</td> 
 
      <td name="fecha_inicio">2016-04-04</td> 
 
      <td name="hora">23:30:00</td> 
 
      <td name="duracion">1.5</td> 
 
      <td name="titulo">Recoger Mónica en Aeropuerto</td> 
 
      <td name="descripcion"></td> 
 
      <td name="todo_el_dia">N</td> 
 
      <td name="tipo_evento">GENERAL</td> 
 
     </tr> 
 
    </table>

Ama WordPress geri bu hatayı bana veriyor sorgu doğrudur, ancak hatayı bulmak için başka ne aradığını bilmiyorum.

sorgu

\t public function search_calendar(){ 
 
\t \t $year = $this->param('year'); 
 
\t \t $moth = $this->param('month'); 
 
\t \t 
 
\t \t if ((!$year) || (!$moth)){ 
 
\t \t \t wp_send_json_error('Los campos de mes y año son obligatorios '); 
 
\t \t } 
 
\t \t else{ 
 
\t \t \t $mothnext = $moth+1; 
 
\t \t \t if ($moth < 10) $moth = "0".$moth; 
 
\t \t \t if ($mothnext < 10) $mothnext = "0".$mothnext; 
 
\t \t \t $where = "fecha_inicio between '".$year."-".$moth."-01' and '".$year."-".$mothnext."-01'"; 
 
\t \t \t $items = $this->calendar->getCalendar($where); 
 
\t \t \t if (count($this->calendar->getErrorMsgs())>0){ 
 
\t \t \t \t wp_send_json_error($this->calendar->getErrorMsgsAndClean()); 
 
\t \t \t } 
 
\t \t \t else wp_send_json_success($items); 
 
\t \t } 
 
\t }

public function getCalendar($where){ 
 
     global $wpdb 
 
\t \t $sql = 'Select * From '.$wpdb->prefix.$this->tablename; 
 
\t \t if (!empty($where)) 
 
\t \t \t $sql =$sql." Where ".$where; 
 
\t \t $items = $wpdb->get_results($sql); 
 
\t \t if (!empty($wpdb->print_error())) 
 
\t \t \t $this->setErrorMsg('Search Operation error: '.$wpdb->print_error()); 
 
\t \t 
 
\t \t return $items; 
 
\t }
php üzerinde bu iki işlevi tarafından JavaScript

function search_events (year, month){ 
 
\t \t 
 
\t \t jQuery.ajax({ 
 
\t \t \t type: 'post', 
 
\t \t \t url: js_object.ajaxurl, 
 
\t \t \t async: false, 
 
\t \t \t data:{ 
 
\t \t \t   'action': 'search_calendar', 
 
\t \t \t   'year': year, 
 
\t \t \t   'month': month 
 
\t \t \t }, 
 
\t \t \t success: function(response){ 
 
\t \t \t  \t jQuery('section[role="error_message"]').empty(); 
 
\t \t \t  \t if (response.success){ 
 
\t \t \t  \t \t listado_eventos = response.data; 
 
\t \t \t  \t } 
 
\t \t \t  \t else { 
 
\t \t \t  \t \t jQuery('section[role="error_message"]').append(
 
\t \t \t  \t \t \t \t '<article class="alert alert-danger">'+response.data+'</article>'); 
 
\t \t \t  \t } 
 
\t \t \t  } 
 
\t \t }); 
 
\t \t return listado_eventos; 
 
\t }
bu işlevin trigged Ve yürütülür

Ancak gerçekten garip bir düşüncede, sorgu yalnızca sorgudaki son satırı döndürür.

+0

Sorununuzla ilgili görünmeyen bir html yerine kodu göndermelisiniz. – jeroen

+0

Merhaba, Gönderiyi sql sorgusunu tetikleyen php ve javascript koduyla güncelliyorum. –

+0

Merhaba, etrafında bir iş buldum. Fecha_inicio'dan '2016-03-01' ve '2016-04-01' arasında fecha_inicio> = '2016-03-01' ve fecha_inicio <'2016-04-01' arasında olan clausule'yi değiştirin ve şimdi çalışıyor. Hala hata mesajı alıyorum ama veriyi veritabanından alıyorum. Garip olan şey, bu mesajı sadece veritabanını ajax ile adlandırılan işlevlerde çağırdığımda almamdır. Ama en azından şimdi çalışıyor. –

cevap

0

küresel $ wpdb eksik noktalı virgül (;)

public function getCalendar($where){ 
     global $wpdb; 
     $sql = 'Select * From '.$wpdb->prefix.$this->tablename; 
     if (!empty($where)) 
      $sql =$sql." Where ".$where; 
     $items = $wpdb->get_results($sql); 
     if (!empty($wpdb->print_error())) 
      $this->setErrorMsg('Search Operation error: '.$wpdb->print_error()); 

     return $items; 
    } 

Durum 2: durumunuz olabilirdi Size tek bir sütun verir, match.So olduğunu.

+0

Yanıtladığınız için teşekkürler. ama noktalı virgül hatası benim kötüyüm, bu hatayı yazıya çevirdiğimde hata yaptım. –