У меня есть поле («готово») в базе данных, которое является логическим. Функция 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() .'}}';
}
}
В SQL на самом деле нет логических значений, как вы заметили 1
а также 0
,
Правильная терминология BIT
поле. Вы не должны пытаться изменить его, если вы извлекаете его как 1
а также 0
тогда вы должны вставить его как 1
или же 0
,
Также обратите внимание, что JSON в улове будет неправильным, никогда не создавайте JSON вручную. Так что поменяйте:
echo '{"error":{"text":'. $e->getMessage() .'}}';
в
echo json_encode(array('error'=>$e->getMessage()));
Действительно просто,
$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;
}
Так далее..