MySQL Where子句值0和1无法正常工作

时间:2015-07-26 02:01:29

标签: php mysql pdo enums

情况

在表格中,我将列配置为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']在值为零时未设置。我正在使用isset()

试图解决问题

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

  • 尝试以下,无法正常工作

    $sql->bindValue(':value', '0'); // post contains 0 or 1

  • 我将列类型更改为TINYINT(1) - 无效。查找零时,所有内容都显示。

  • 将PDO bindValue() $data_type设为PDO::PARAM_BOOL无法正常工作

2 个答案:

答案 0 :(得分:0)

试试这个:

row
祝你好运!

答案 1 :(得分:0)

ENUM是一个字符串对象,其值从允许值列表中选择,这些值在表创建时在列规范中显式枚举。

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

  

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

mysql> SELECT * FROM tbl_name WHERE enum_col=0;

因此,使用单引号将零(0)视为字符串。