2016-05-26 91 views
1

我用PHP,PDO和SQL相对缺乏经验。据说,我一直在做一个小项目,虽然大多数事情都按预期工作,但我遇到了一些问题。 采取从mysql(MariaDB的)以下信息数据库使用准备好的声明PDO与PHP - 二进制数

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

在PHP我有,你输入你的年龄,例如一个简单的形式。我的是33.

$age=decbin($_POST['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不管什么,我的年龄进入。

我试着做投(:年龄为二进制(6))具有相同的结果。我完全不知道如何完成这项任务。

*****在数据库中粘贴*****

我已经改变年龄为整数纠正错字,但是,我仍然是一对夫妇开/关选择存储为二进制(1 )并提出同样的问题。 PHP可以正确显示的值作为1或0,但是当发送到分贝,它始终是一个1(年龄呈现一个很好的例子,因为所有的6位是1)

+4

我已经得到了有关'Type'列不好的预感。你有什么打算使用'BIT'类型? – tadman

+0

^问自己同样的事情。 –

+3

Moi ausi mon ami。为什么要将一个年龄(一个明显的整数)存储为二进制文件? – RiggsFolly

回答

1

UPDATE:经过进一步研究,它的声音像我以前的答案您正在使用它被传递到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(); 

(PRE​​VIOUS ANSWER)

MySQL Reference

要指定的比特值,可以使用b'value”符号。值是使用零和1写入的二进制值。例如,b'111'和b'10000000'分别代表7和128。

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

+0

将在今天的工作尝试这个,谢谢! – driz

+0

我试着用相同的结果。我用一些笔记更新了OP。年龄现在只是一个整数,但我有一些开/关,他们仍然被发送为1,无论它如何存储。 PHP可以正确显示它。 – driz

+1

@driz我可能应该早点查找'decbin'。该函数返回一个字符串。所以只需将'$ age'值直接传递给数据库,而不必通过'decbin'。 – kunruh