Приведите столбец как логическое значение в PDO

У меня есть поле («готово») в базе данных, которое является логическим. Функция GET / row не возвращает json с этим полем как логическое значение, но возвращает 1 или 0.

function getTasks() {
$sql = "SELECT id,task_name,done FROM tarea ORDER BY id";
try {
$db = getConnection();
$stmt = $db->query($sql);
$tasks= $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($tasks);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}

Как я могу получить столбец TH (столбец done) как логическое значение? Я имею в виду, можно ли привести столбец с PDO :: PARAM_BOOL ??

Вот мой пример UPDATE, который вставляет логические значения в базу данных, и он отлично работает:

function updateTask($id) {
$request = Slim::getInstance()->request();
$body = $request->getBody();
$task = json_decode($body);
$sql = "UPDATE tarea SET task_name=:task_name, done=:done WHERE id=:id";

try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("task_name", $task->task_name);

$stmt->bindParam("done", $task->done,PDO::PARAM_BOOL);  // cast before execute

$stmt->bindParam("id", $id);
$stmt->execute();
$db = null;
echo json_encode($task);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}

0

Решение

В SQL на самом деле нет логических значений, как вы заметили 1 а также 0 ,

Правильная терминология BIT поле. Вы не должны пытаться изменить его, если вы извлекаете его как 1 а также 0 тогда вы должны вставить его как 1 или же 0,

Также обратите внимание, что JSON в улове будет неправильным, никогда не создавайте JSON вручную. Так что поменяйте:

echo '{"error":{"text":'. $e->getMessage() .'}}';

в

echo json_encode(array('error'=>$e->getMessage()));
0

Другие решения

Действительно просто,

$tasks = array();
while( false !== ( $task = $stmt->fetch(PDO::FETCH_OBJ) ) ){
$task->done = (bool)$task->done;
$tasks[] = $task;
}

если это не работает, вы можете сделать это тоже

if(intval($task->done)){
$task->done = true;
}else{
$task->done = false;
}

Так далее..

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector