MySQL中的Tinyint结果返回错误的值

时间:2015-01-15 20:20:09

标签: php mysql pdo tinyint

我有一张约有5万条记录的表格。每条记录都与一个激活码和一个1或0的tinyint(1)相关联,具体取决于它是否被激活。

我写了这个脚本来搜索激活码:

$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 

无论是数据库中的1还是0,所有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)

我没有在您的代码中发现问题,我建议您检查数据。