簡體   English   中英

在 PHP 中使用准備好的 PDO 語句 - 二進制數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM