Результаты Tinyint в MySQL возвращают неверные значения

У меня есть таблица с 50k записей. Каждая запись связана с кодом активации и tinyint (1), который равен 1 или 0, в зависимости от того, активирована она или нет.

Я написал этот скрипт для поиска кодов активации:

$count = 1;
foreach ($array as $value) {

try{
$stmt = $db->prepare("SELECT * FROM customers WHERE code = '$value'");
$stmt->execute();
$row = $stmt->fetchAll();

foreach ($row as $row1) {
echo "$count,{$row1['code']},{$row1['activated']} <br />";
}

}catch(PDOException $e){
echo $e;
}

$count++;
}

Результаты будут распечатаны следующим образом:

263,GCTDA598149901,1
264,GCTDA363633527,1
265,GCTDA474011458,1
266,GCTDA610122649,1
267,GCTDA973129612,1
268,GCTDA472831092,1
269,GCTDA567914117,1
270,GCTDA763417638,1
271,GCTDA833541425,1
272,GCTDA556328307,1
273,GCTDA441015640,1
274,GCTDA266326284,1
275,GCTDA495338154,1
276,GCTDA320542455,1
277,GCTDA429649757,1
278,GCTDA468213166,1
279,GCTDA264634579,1
280,GCTDA842325439,1
281,GCTDA331321327,1
282,GCTDA280321014,1
283,GCTDA904841155,1
284,GCTDA728739105,1

Все tinyint возвращаются как 1, будь то 1 или 0 в базе данных. Сейчас я действительно в недоумении от того, что его вызывает. Я надеюсь, что кто-то может помочь.

0

Решение

Самое логичное объяснение поведения, которое вы наблюдаете …

activated столбец содержит значение 1,

Чтобы увидеть, есть ли у вас что-то кроме 1, вы можете выполнить запрос, подобный этому:

SELECT c.activated, COUNT(*) AS cnt
FROM customers
GROUP BY c.activated

Чтобы найти отдельные строки, имеющие NULL или значение, отличное от 1

SELECT c.*
FROM customers c
WHERE NOT ( c.activated <=> 1 )
LIMIT 100

Если вы хотите протестировать свой текущий код, добавьте предикат в запрос

AND NOT (activated <=> 1)

Я не вижу проблемы в вашем коде, я рекомендую проверить данные.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]