MySQL 中的 Tinyint 结果返回错误值
Tinyint in MySQL Results Returning Wrong Values
我有一个 table 大约有 50k 条记录。每条记录都与一个激活码和一个 tinyint(1) 相关联,该 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
无论是数据库中的 1 还是 0,所有 tinyint 都返回为 1。我现在真的不知道是什么原因造成的。希望有人能帮忙。
对您观察到的行为的最合乎逻辑的解释...
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)
我没有在你的代码中发现问题,我建议检查数据。
我有一个 table 大约有 50k 条记录。每条记录都与一个激活码和一个 tinyint(1) 相关联,该 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
无论是数据库中的 1 还是 0,所有 tinyint 都返回为 1。我现在真的不知道是什么原因造成的。希望有人能帮忙。
对您观察到的行为的最合乎逻辑的解释...
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)
我没有在你的代码中发现问题,我建议检查数据。