2015-02-04 3 views
0

Я работаю с PrestaShop 1.6.0.9MySQL запросов фильтрации

Я использую функцию getFirstMessage(), который возвратит сообщение системой или пользователем, если они посылают один для отображения на счете-фактуре. Тем не менее, я боюсь с этим SQL здесь.

<?php 

Class Order extends OrderCore { 
    public function getFirstMessage() 
    { 
     return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' 
      SELECT `message` 
      FROM `'._DB_PREFIX_.'message` 
      WHERE `id_order` = '.(int)$this->id.' 
      ORDER BY `id_message` 
     '); 
    } 
} 

Когда заказчик что-то заказывает, набор сообщений по умолчанию имеет значение «оплата принята» или «ошибка платежа».

Я хочу сделать так, чтобы он не возвращал сообщение, если сообщение «принимает платеж», поэтому я сделал это.

<?php 

Class Order extends OrderCore { 
    public function getFirstMessage() 
    { 
     return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' 
      SELECT `message` 
      FROM `'._DB_PREFIX_.'message` 
      WHERE (`id_order` = '.(int)$this->id.') 
      AND (`message` != "Payment accepted") 
      ORDER BY `id_message` 
     '); 
    } 
} 

Но это не сработало, поскольку оно все еще возвратило «принятую оплату», поэтому я попробовал это.

<?php 

Class Order extends OrderCore { 
    public function getFirstMessage() 
    { 
     $sql_val = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' 
      SELECT `message` 
      FROM `'._DB_PREFIX_.'message` 
      WHERE (`id_order` = '.(int)$this->id.') 
      AND (`message` != "Payment accepted") 
      ORDER BY `id_message` 
     '); 

     if(
      $sql_val == "Payment accepted" 
     ) 
     { 
      return "No Message"; 
     } else { 
      return $sql_val; 
     } 
    } 
} 

Это тоже не удалось. Итак, теперь я хочу получить некоторые предложения о том, как я могу справиться с этим?

+0

может быть, ваша проблема просто так чувствительны, попробуйте '(\' message \ '! = 'payment accepted')' также, используйте одинарные кавычки, а не двойные кавычки со строками –

+0

Вот как это сообщение находится в базе данных, просто заглавный П. Кроме того, я не могу использовать одинарные кавычки, как тогда Принимается оплата станет частью конкатенации, которая затем выдаст ошибку, потому что она должна быть строкой – ProEvilz

+0

Вы можете и должны использовать одинарные кавычки. потому что двойные кавычки в sql означают, что вы используете имя поля. Попробуйте следующим образом: '(\' message \ '! = \ 'Принимается платеж \')'. –

ответ

0

Если я могу предложить вам решение, сравнение строки «всегда» магический трюк, так что я хотел бы сделать таким образом:

<?php 
public function getFirstMessage() 
{ 
    $sql_val = strtolower(parent::getFirstMessage()); 
    if(!strcmp($sql_val, 'payment accepted')){ // 
     // do stuff 
    } 
    else { 
     // do other stuff 
    } 
}