【问题标题】:MySQL Where clause values 0 and 1 not working correctlyMySQL Where 子句值 0 和 1 无法正常工作
【发布时间】:2015-07-26 02:01:28
【问题描述】:

情况

在表中,我将列配置为ENUM('0','1')。我已经像这个例子一样使用 PDO 选择查询构建

$value = isset($_POST['value']) ? $_POST['value'] : (isset($_GET["value"]) ? $_GET["value"] : null);

$sql = $pdo->prepare("SELECT * FROM tablename WHERE column = :value");
$sql->bindValue(':value', $_POST['value']); // post contains 0 or 1
$sql->execute();

问题

打印结果时,值 1 正常工作。但是当使用值为 0 时,所有行都显示,包括值为 1 的行。

在 HeidiSQL 中尝试以下查询时正常工作,但在 PHP 中却没有。怎么了?

SELECT * FROM tablename WHERE column = '0'

我注意到 PHP 认为 $_POST['value'] 在其值为 0 时未设置。我正在使用isset()


试图解决问题

  • 无效如果使用$_GET['value'] 和像index.php?value=0 这样的网址

  • 尝试过,不起作用

    $sql->bindValue(':value', '0'); // post 包含 0 或 1
  • 我将列类型更改为TINYINT(1) - 没有效果。当寻找零时,所有的都显示出来了。

  • 将 PDO bindValue() $data_type 设置为 PDO::PARAM_BOOL不起作用

【问题讨论】:

  • 它应该可以工作可能是 $_POST 值的问题
  • 您的 PHP 版本针对的是名为“tablename”的表,请尝试将“customers_view”放在那里。还是这只是复制粘贴错误?
  • @Carsten,这只是一个复制粘贴错误。我尝试在 Stackoverflow 中使用 tablenamecolumn。感谢您的指点 - 已编辑。

标签: php mysql pdo enums


【解决方案1】:

试试这个:

$value = empty($_POST['value']) ? '0' : '1' ;

$sql = $pdo->prepare("SELECT * FROM tablename WHERE column = :value");
$sql->bindValue(':value', $value, PDO::PARAM_STR); // post contains 0 or 1
$sql->execute();

祝你好运!

【讨论】:

  • 无效。而且我的代码在使用$_GET['value'] 和像index.php?value=0这样的网址时也不起作用
  • 将$value替换为'0',所以:$sql->bindValue(':value', '0', PDO::PARAM_STR); 看看是否有效像这样,还要检查我对答案的最新编辑。
【解决方案2】:

ENUM 是一个字符串对象,其值选自创建表时列规范中明确枚举的允许值列表。

枚举值必须是带引号的字符串文字;它可能不是一个表达式,即使是一个计算结果为字符串值的表达式。

空字符串错误值的索引值为0。这意味着 您可以使用以下 SELECT 语句来查找其中的行 分配了无效的 ENUM 值:

mysql> SELECT * FROM tbl_name WHERE enum_col=0;

所以使用单引号将零(0)视为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2020-03-15
    • 1970-01-01
    • 2014-04-06
    • 2023-03-29
    • 2022-01-22
    • 2021-12-16
    相关资源
    最近更新 更多