2013-10-25 4 views
2

Я использую драйвер sqlsrv с PHP 5.3.27. Как передать значение «null» в качестве параметра для запроса. Таким образом, вместоPass "is null" в качестве параметра для запроса с sqlsrv

SELECT row_id FROM table WHERE name IS NULL 

Я мог бы использовать

SELECT row_id FROM table WHERE name = ? 
+0

Что не так с использованием IS NULL? –

+0

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

+0

взгляните на мой запрос и скажите мне, служит ли это для ура или нет. –

ответ

0

я, хотя другим способ сделать это сам

SELECT row_id FROM table WHERE ISNULL(name,-1)=? 

Если вы» убедитесь, что вы никогда не будете использовать «-1» в качестве условия, это будет работать. Просто используйте свой параметр, когда вам нужно значение и «-1», когда вам нужно «IS NULL». Но я думаю, что невозможно передать «null» в качестве параметра

1

Ну ... Что мешает вам писать, если/другое положение?

if($i_need_a_value) { 
    $query = 'SELECT row_id FROM table WHERE name = ?'; 
} else { 
    $query = 'SELECT row_id FROM table WHERE name IS NULL'; 
} 
+0

Просто интересно, если это возможно. Если нет - я думаю, это будет способ сделать это. –

+0

ну, прямо сейчас я использую это решение И я думаю, что ответ на мой вопрос заключается в том, что я не могу –

+0

проверить значения NULL, которые вам нужны 'IS NULL' (поскольку' = NULL' не дает вам результата вы можете ожидать, проверьте [this] (http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html) для объяснения). Таким образом, вам нужно либо это простое предложение, либо относительно сложный запрос. Для простоты я бы выбрал такое решение. Вы также можете вставить оператор, например: '$ operator = '='; $ query = 'SELECT row_id FROM table WHERE name'. $ operator. ' ? '; ' – giorgio

0

u может проверить конкретный столбец, если он равен null или содержит некоторое значение по следующему запросу.

select row_id 
from table 
where (name IS NULL) or (name IS NOT NULL && name<>''); 
+0

примечание для предотвращения путаницы:' <> 'эквивалентно'! = 'При использовании в заявлении where – giorgio

+0

<> означает не равный, насколько я знаю @giorgio: p –

+0

да, опечатка, уже изменена ;) – giorgio

0

Вы можете использовать оператор case для устранения проблемы с ошибкой. Аккуратная Хитрость заключается в том, чтобы использовать объединение с однорядным фиктивным запросом, чтобы избежать того, чтобы связать свою ценность дважды:

SELECT row_id 
FROM table 
JOIN (SELECT ? AS param) dummy 
WHERE (name IS NULL AND param IS NULL) OR name = param 
Смежные вопросы