2014-01-18 2 views
0

Ниже мой SQL запрос:MySQL запрос вставить, если все значения установлены

$result = mysqli_query($con,"SELECT url,img_url,sentiment,title,category from invite_page where category='".$category."' where today = '".$today."' order by rt_count desc limit 3 "); 
while ($row = @mysqli_fetch_array($result)) 
{ 
    $url = $row['url']; 
    $img_url = $row['img_url']; 
    ... 
} 

Я отображаются эти неправдоподобные значения для пользователя в некотором окне дисплея.

  1. Проблема в несколько рядов title и img_url поля пусты в базе данных. Я хочу получить только те записи, где заполняются все поля. Как это сделать?

  2. Если нет 0 записей для today = '".$today."', тогда он должен принимать рекорды по убыванию. (desc order of rt_count также должен сохраняться. Я хочу показать запись, начиная с максимального значения до нижнего)

Как это сделать?

ответ

2
  1. Добавить проверки этих полей в пункт WHERE.
  2. Измените today с = на номер <= и добавьте его в пункт ORDER BY.


SELECT url,img_url,sentiment,title,category 
FROM invite_page 
WHERE category='".$category."' 
    AND today <= '".$today."' 
    AND title != '' 
    AND img_url != '' 
ORDER BY today DESC, rt_count DESC 
LIMIT 3 
+0

о да , если он этого хочет, чем мой +1, и в любом случае вопрос путается, так что избавился от моего ответа –

+0

@Barmar: спасибо, 'mysqli_query' создает и проблемы с безопасностью? –

+1

Было бы лучше, если бы вы использовали 'mysqli_prepare' и параметризованные запросы. Если вы используете 'mysqli_query', вы должны вызывать' mysqli_real_escape_string' на любом вводе пользователем. – Barmar

2

Вы должны прекратить использовать расширение базы данных так же, как старый, давно устарел mysql расширение. Это небезопасно, поскольку он позволяет делать инъекции sql. Используйте расширение mysqli или pdo в сочетании с подготовленными инструкциями, которые решили эти проблемы. Начните с этим запросом «прототипом»:

SELECT url,img_url,sentiment,title,category 
    FROM invite_page 
    WHERE category = :category AND today <= :today 
    AND title IS NOT NULL AND img_url IS NOT NULL 
    ORDER BY rt_count desc, rt_count desc 
    LIMIT 3 

Есть ли у Вас, чтобы проверить, как title IS NOT NULL, как в приведенном выше примере, или title!='' зависит от настройки базы данных, если эти столбцы являются NULL или держать пустую строку в качестве содержимого.

Далее «связывает» ваши параметры на утверждение перед выполнением (точный синтаксис зависит от расширения, которое вы используете, есть миллионы примеров там на Google для этого:

$db->bind('category', $category); 
$db->bind('today', $today); 

Далее выполните подготовленные заявление.

Обратите внимание, что это не работает из коробки, он призван направить вас в правильном направлении. вы определенно прочитать документацию и изучить некоторые примеры, которые вы найдете в Интернете.

+1

Он не использует устаревшее расширение 'mysql', он использует' mysqli'. – Barmar

+0

Действительно, но он использует mysqli так же, как и старое расширение mysql. Это приводит к точно такой же проблеме, поэтому более или менее те же рекомендации применяются. Спасибо за указание на это! – arkascha

+0

Что делает удаление старого расширения из PHP (которое НИКОГДА не произойдет, есть слишком много сайтов, использующих его) связано с ним?Вы согласились, что он не использует старое расширение. Использование нового расширения так же, как и старое расширение, не делает его зависимым от старого расширения. – Barmar

Смежные вопросы