使用准备好的PDO语句与PHP - 二进制数

时间:2016-05-26 20:56:46

标签: php mysql pdo

我对php,pdo和sql相对缺乏经验。话虽这么说,我一直致力于一个小项目,虽然大多数事情按预期工作,但我遇到了一些问题。 从mysql(mariadb)数据库中获取以下信息

| Field  | Type   | Null | Key | Default  | Extra  |
| age    | bit(6) | YES  |     | NULL     |        |

在PHP中,我有一个简单的表格,您输入您的年龄,例如。我的年龄是33岁。

$age=decbin($_POST['age']);

当我回显$ age时,这正确显示100001。 使用我的(可能是可怕的)pdo语句

    $stmt = $DBH->prepare("INSERT INTO Recruit(recruit_id, name, age) VALUES(:recruit_id,:name,:age)");
    $stmt->execute(array(':recruit_id' => $recruit_id, ':name' => $name, ':age' => $age));

recruit_id和名字都显示没有问题,但年龄总是填充为111111,无论我输入什么年龄。

我尝试使用相同的结果进行强制转换(:age as binary(6))。我只是不知道如何完成这项任务。

*****修正了数据库粘贴中的拼写错误*****

我已将年龄更改为整数,但是,我仍然是一些存储为二进制(1)的开/关选项,并且存在相同的问题。 php可以正确地将值显示为1或0,但是当发送到数据库时,它始终为1.(年龄提供了一个很好的示例,因为所有6位都是1)

1 个答案:

答案 0 :(得分:1)

更新:经过进一步研究后,听起来我之前的答案对您使用的方法无效,因为传递给execute函数的参数都被视为PDO::PARAM_STR。您需要将它们全部分开绑定,并使用PDO::PARAM_INT作为年龄变量。像这样:

$stmt = $DBH->prepare("INSERT INTO Recruit(recruit_id, name, age) VALUES(:recruit_id,:name,:age)");
$stmt->bindParam(':recruit_id', $recruit_id, PDO::PARAM_STR);
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
$stmt->execute();

(以前的答案)

来自MySQL Reference

  

要指定位值,可以使用b'value'表示法。 value是使用零和1写的二进制值。例如,b'111'和b'10000000'分别代表7和128。

所以我试试这个:$age = "b'".decbin($_POST['age'])."'";