2016-05-26 69 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