【问题标题】:SQL getting opposite results due to mistaking 1 and 0, vise-versa由于错误 1 ​​和 0,SQL 得到相反的结果,反之亦然
【发布时间】:2016-11-12 12:44:49
【问题描述】:

在这段代码中,我试图测试这种检查数据的布尔方法。这个项目的目的是为我们的校园制定一个食品预算系统。在这个初级阶段,我设置了一个表,它有一个布尔值来检测不同的选项。

<?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>';


?>

表格数据:

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

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

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

【问题讨论】:

  • 请将CREATE TABLE... 语句添加到您的问题中
  • 顺便说一句:您应该确保在您的 DELETE 中区分大小写:DELETE FROM food WHERE LOWER(name) LIKE '%sanwhich%'
  • 哦,谢谢您的建议 :) 但是,这些 CREATE TABLE 事情是静态完成的,就像 PHPmyadmin.co 一样,因此我没有添加任何 CREATE TABLE 语句,其次,删除事情没有在我的代码中确实发挥了很大作用,它是用于测试 DELETE,而不是我现在的问题 [不要试图粗鲁,老实说 :)]
  • 他的意思是show create table xxx的输出。它以何种方式创建并不重要。如果你在 phpmyadmin 中输入你的 select-query 会发生什么?
  • 我很抱歉我的无知,但我没有得到

标签: php mysql search boolean


【解决方案1】:

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

注意:BOOLEANTINYINT是同一个in MySQL RDBMS.

这是我尝试过的 DDL 语句。

CREATE TABLE food (id INTEGER, name VARCHAR(100), isForSingle TINYINT);

然后,我插入 2 条记录。

INSERT INTO food VALUES(1,'Hamburger',1);
INSERT INTO food VALUES(2,'Pizza',0);

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

<?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);
// ------------------------------------------------------------------

结果如下。

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"
  }
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 2012-03-28
    • 2012-12-10
    • 1970-01-01
    • 2014-11-08
    • 2012-02-16
    • 2013-08-16
    • 2012-06-27
    相关资源
    最近更新 更多