[英]Using prepared PDO statement with PHP - binary numbers
我對 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 和 name 都沒有問題,但無論我輸入什么年齡,年齡總是填充為 111111。
我試過用同樣的結果來做 cast(:age as binary(6)) 。 我只是不知道如何完成這項任務。
*****更正了數據庫粘貼中的錯字*****
我已將年齡更改為整數,但是,我仍然是一些存儲為 binary(1) 的開/關選項,並且出現了相同的問題。 php 可以正確地將值顯示為 1 或 0,但是當發送到數據庫時,它始終為 1。(年齡是一個很好的例子,因為所有 6 位都是 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 參考:
要指定位值,可以使用 b'value' 表示法。 value 是使用零和一寫入的二進制值。 例如,b'111' 和 b'10000000' 分別代表 7 和 128。
所以我會試試這個: $age = "b'".decbin($_POST['age'])."'";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.