首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由于1和0的错误,SQL得到了相反的结果,反之亦然

由于1和0的错误,SQL得到了相反的结果,反之亦然
EN

Stack Overflow用户
提问于 2016-07-10 21:08:54
回答 1查看 87关注 0票数 1

在这段代码中,我尝试测试这种检查数据的布尔方法。这个项目的目的是为我们学校的校园制作一个食物预算系统。在这个基本阶段,我已经设置了一个表,其中有一个布尔值来检测不同的选项。

代码语言:javascript
运行
复制
<?php

$db_host = "db4free.net";
$db_name = "testable";
$db_username = "muymuy1";
$db_password = "Muymuy2002";

$db = new PDO("mysql:host=$db_host; dbname=$db_name; charset=utf8", "$db_username", "$db_password") or die("error");

$sql = "INSERT INTO `food` (name, id, price, isForSingle, isForPair, isForSharing, isFullMeal) VALUES ('Sanwhich 234', NULL, 110, 1, 0, 0, 0)";
$db->query($sql) or die("Something happened");

$sql = "DELETE FROM `food` WHERE name LIKE '%sanwhich%'";
$stmt = $db->query($sql) or die("error 4");

$sql = "SELECT * FROM `food` WHERE isForSingle=0";
$stmt = $db->query($sql) or die("error 5");

$data = array();
$count = 0;

if($stmt !== false)
{
     while($row = $stmt->fetch(PDO::FETCH_ASSOC))
        { 
            $data[$count] = array(
                "id" => $row['id'],
                "name" => $row['name'],
                "price" => $row['price'],
                "isFullMeal" => $row['isFullMeal'],
                "isForSharing" => $row['isForSharing'],
                "isForPair" => $row['isForPair'],
                "isForSingle" => $row['isForSingle'],
             );
         $count += 1;
      }

 }

echo '<pre>'; print_r($data); echo '</pre>';


?>

表数据:

然而,我的问题是这不起作用。1与1混淆,1与0混淆,因为当我使用WHERE isForPair = 0搜索时,出现的是具有1的数据行,而当我搜索WHERE isForPair = 1时,出现的是具有0的数据行。

1) ...WHERE isForPair =0(输出: isForPair =1的结果)

2) ...WHERE isForPair =1(输出:无,尽管表中的所有内容都是isForPair = 1)

EN

回答 1

Stack Overflow用户

发布于 2016-07-10 22:35:49

table (CREATE TABLE)语句的DDL语句必须与查询匹配。您似乎希望将表中的数据与布尔值进行匹配。在这种情况下,您可以在数据库中将字段isForSingle转换为TINYINT数据类型。

注意: BOOLEANTINYINT是相同的in MySQL RDBMS.

下面是我尝试过的DDL语句。

代码语言:javascript
运行
复制
CREATE TABLE food (id INTEGER, name VARCHAR(100), isForSingle TINYINT);

然后,我插入两条记录。

代码语言:javascript
运行
复制
INSERT INTO food VALUES(1,'Hamburger',1);
INSERT INTO food VALUES(2,'Pizza',0);

然后,我尝试用PHP代码查询数据。

代码语言:javascript
运行
复制
<?php

$db_host = "YOURDBHOST";
$db_name = "YOURDATABASE";
$db_username = "YOURUSERNAME";
$db_password = "YOURPASSWORD";

$db = new PDO("mysql:host=$db_host; dbname=$db_name; charset=utf8", "$db_username", "$db_password") or die("error");

// ------------------------------------------------------------------
$sql = "SELECT * FROM `food` WHERE isForSingle=1";
$stmt = $db->query($sql) or die("error");

$data = array();
$count = 0;

if($stmt !== false)
{
     while($row = $stmt->fetch(PDO::FETCH_ASSOC))
        { 
            $data[$count] = array(
                "id" => $row['id'],
                "name" => $row['name'],
                "isForSingle" => $row['isForSingle'],
             );
         $count += 1;
      }

 }

var_dump($data);
// -----------------------------------------------------------------



// ------------------------------------------------------------------
$sql = "SELECT * FROM `food` WHERE isForSingle=0";
$stmt = $db->query($sql) or die("error");

$data = array();
$count = 0;

if($stmt !== false)
{
     while($row = $stmt->fetch(PDO::FETCH_ASSOC))
        { 
            $data[$count] = array(
                "id" => $row['id'],
                "name" => $row['name'],
                "isForSingle" => $row['isForSingle'],
             );
         $count += 1;
      }

 }

var_dump($data);
// ------------------------------------------------------------------

结果如下所示。

代码语言:javascript
运行
复制
array(1) {
  [0] =>
  array(3) {
    'id' =>
    string(1) "1"
    'name' =>
    string(9) "Hamburger"
    'isForSingle' =>
    string(1) "1"
  }
}
array(1) {
  [0] =>
  array(3) {
    'id' =>
    string(1) "2"
    'name' =>
    string(5) "Pizza"
    'isForSingle' =>
    string(1) "0"
  }
}

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38292212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档