2013-03-19 2 views
1

У меня есть PHP-код, который получает значения, используя $_POST, а затем вставляет в БД. Все поля вводятся за исключением CU00 и т. Д., Поскольку он обозначает первичный ключ.Оператор SELECT для значений NOT NULL возвращает значения NULL.

Теперь предположим, что пользователь вводит только один ряд:

$ sql="INSERT INTO weekly 
VALUES 
('$_POST[uactual]','$_POST[utarget]','CU001','$a1','$_POST[ucomment]',NOW()) 
,('$_POST[uactual2]','$_POST[utarget2]','CU002','$a2','$_POST[ucomment2]',NOW()) 
,('$_POST[uactual3]','$_POST[utarget3]','CU003','$a3','$_POST[ucomment3]',NOW()) 
,('$_POST[dactual]','$_POST[dtarget]','CD001','$b1','$_POST[dcomment]',NOW()) 
,('$_POST[dactual2]','$_POST[dtarget2]','CD002','$b2','$_POST[dcomment2]',NOW()) 
,('$_POST[dactual3]','$_POST[dtarget3]','CD003','$b3','$_POST[dcomment3]',NOW()) 
,('$_POST[iactual]','$_POST[itarget]','CI001','$c1','$_POST[icomment]',NOW()) 
,('$_POST[iactual2]','$_POST[itarget2]','CI002','$c2','$_POST[icomment2]',NOW()) 
,('$_POST[iactual3]','$_POST[itarget3]','CI003','$c3','$_POST[icomment3]',NOW()) 
,('$_POST[ractual]','$_POST[rtarget]','CR001','$d1','$_POST[rcomment]',NOW()) 
,('$_POST[ractual2]','$_POST[rtarget2]','CR002','$d2','$_POST[rcomment2]',NOW()) 
,('$_POST[ractual3]','$_POST[rtarget3]','CR003','$d3','$_POST[rcomment3]',NOW())"; 

SQL TABLE

ACTUAL|TARGET|KEY |SIGNAL |TIME 
NULL NULL CU001 NULL 00:00 
NULL NULL CU002 NULL 00:00 
NULL NULL CU003 NULL 00:00 
NULL NULL CU004 NULL 00:00 
100  200 CU005 300 00:00 

Я хочу, чтобы сделать выбор, где выбираются только строки с сигналом. Но когда я делаю a:

SELECT * 
    FROM TABLE 
    WHERE 
    'signal' IS NOT NULL 

Я получаю все возвращенные строки. Как будто в моей таблице нет значений NULL.

+0

Использовано isset ... работает чудесно сейчас –

ответ

0

Вы помещаете пустые строки в БД.

ли это:

(empty($_POST['uactual']) ? 'NULL' : '\'' . $_POST['uactual'] . '\'') 

Для всех $_POST переменных. Тогда вы можете быть уверены, что будут значения NULL.

Пожалуйста, не делайте этого: $_POST[uactual]! Сначала PHP будет искать определенный val! Do $_POST['uactual'] Используйте «всегда!

Кроме того, ваш выбор неправильный. `не '. Если вы не верите, сделать такой запрос:

SELECT 'signal' FROM TABLE 

Это правильно:

SELECT `signal` FROM TABLE or 
SELECT signal FROM TABLE 

Это вернет вам строку «сигнал», а не `signal` столбец.

WHERE 
    'signal' IS NOT NULL 

Это всегда будет true! Вот почему он возвращает целые данные. Вы сделали 2 ошибки:] При вставке и выборе данных.

+0

Я сделал это для inseret bcos, это столбец сигналов, но он никогда не работал, должен ли я изменить SQL сейчас –

+0

Независимо от того, где вы это сделаете. Ваша строка вставки должна содержать: NULL (без '') или 'somestring' (с '') или 888 (без '', если это должны быть числа). Вы также можете сделать (int) $ x. Тогда вы будете уверены, что значение будет целочисленным (0, если не числовой). Я бы сделал оба (int) + empty:] – imclickingmaniac

+0

'empty ($ x)? NULL: (int) $ x' Надеюсь, это поможет. – imclickingmaniac

3
SELECT * 
    FROM TABLE 
    WHERE 
    signal IS NOT NULL 

'signal' просто строка символов, которая действительно NOT NULL. Возможно, это означало `вместо '.

+0

нет У меня это как int –

+0

Вы использовали неправильный тип котировок вокруг 'signal' –

+0

@SaiVignesh no,' 'signal'' is string, not int. – Andrey

0

Вы не вставляете никаких NULL. В лучшем случае вы вводите пустые строки.

Кроме того, вы должны использовать некоторую проверку своих входов.

+0

Я не могу добавить комментарии ниже POST, но ниже ответ неверен. Кавычки вокруг строки не нужны, MySQL не будет понимать это как строку, а скорее как имя столбца. –

+0

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

+0

oh Как фильтровать пустую строку, а затем –

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