SQL-запрос PHP PDO не находит ненулевых строк

#php #mysql #pdo #null

#php #mysql #pdo #null

Вопрос:

 table
-----
id column1
1  some random text
2  more random text
3  
4  blah blah
5
6
7
8
9

$sqlData7 = $this->con->prepare("SELECT id, column1 FROM table WHERE column1 IS NOT NULL");
$rowTotal7 = $sqlData7->rowCount();
$attIdArr7 = $sqlData7->fetchAll(PDO::FETCH_COLUMN, 0);

print_r($attIdArr7);
 

Это должно вернуть:

 Array ( [0] => 1 [1] => 2 [2] => 4 )
 

но возвращает

 Array ( )
 

Что я делаю не так, что он не собирает столбцы not null?

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

большое спасибо

Комментарии:

1. Это сомнительный вопрос, поскольку приведенная ниже демонстрация наглядно демонстрирует, что текущий запрос действительно работает

2. Почему он должен возвращать это? Насколько я вижу, вы не выполнили запрос

Ответ №1:

Вам нужно вызвать $sqlData7->execute()

 <?php
$sqlData7 = $pdo->prepare("SELECT id, column1 FROM `table` WHERE column1 IS NOT NULL");
$sqlData7->execute();
$rowTotal7 = $sqlData7->rowCount();
$attIdArr7 = $sqlData7->fetchAll(PDO::FETCH_COLUMN, 1);

var_dump($attIdArr7);
 

Онлайн-тест PHP PDO

Комментарии:

1. У него был SQL execute, я просто забыл добавить его в пример кода. Проблема была в фактическом запросе PDO SQL, поэтому он возвращал пустой массив. Решение, которое сработало, было предоставлено Сурьяпалом Рао.

Ответ №2:

Вы можете написать следующий запрос, чтобы получить ожидаемый результат

 SELECT id, column1 FROM table column1 IS NOT NULL AND TRIM(column1) <> '';
 

Приведенный выше дизайн базы данных предполагает, что столбец пуст и не имеет значения null, но также может быть null. Итак, я проверяю два условия, проверяю, не является ли столбец null, а также проверяю, не пусто ли оно. Я думаю, что он вставляет данные без какой-либо проверки, поэтому он также вставляет пустые значения.

Комментарии:

1. Огромное спасибо. Это решило проблему.

2. Пожалуйста, добавьте некоторые пояснения к вашему ответу, чтобы другие могли извлечь из него уроки. Что вы изменили и почему?

3. Извините, спасибо, что напомнили мне объяснить ситуацию с исправлением данных. @NicoHaase

4. Это не отвечает на вопрос, почему SQL-запрос не находит строки, которые НЕ являются NULL. Вы неправильно поняли вопрос, и ваш ответ неверен.