2016-05-26 2 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, но при отправке в db оно всегда равно 1. (возраст представлен хорошим примером, так как все 6 бит были 1)

+4

У меня плохое предчувствие о 'колонке type'. Каково ваше намерение использовать тип «BIT»? – tadman

+0

^спрашивающ себя то же самое. –

+3

Moi ausi mon ami. Почему вы хотите сохранить возраст (очевидное целое число) как двоичный? – RiggsFolly

ответ

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 - двоичное значение, записанное с использованием нулей и единиц. Например, b'111 'и b'10000000' обозначают 7 и 128 соответственно.

Так что я хотел бы попробовать это вместо: $age = "b'".decbin($_POST['age'])."'";

+0

даст эту попытку на работе сегодня, спасибо! – driz

+0

Я попробовал это с теми же результатами. Я обновил OP с помощью некоторых заметок. возраст теперь просто целое число, но у меня есть некоторые вкл/выкл, они все равно отправляются как 1 независимо от того, как он хранится. php может отображать его правильно. – driz

+1

@driz Я, вероятно, должен был искать 'decbin' раньше. Эта функция возвращает строку. Поэтому просто передайте значение '$ age' непосредственно в базу данных, не помещая его через' decbin'. – kunruh

Смежные вопросы