У меня есть этот запрос:
pg_prepare($conn, 'set_ui_advanced', 'update system.boxes set ui_advanced=$1 where id=$2');
$update_cmd_exec = pg_execute($conn, 'set_ui_advanced', array($ui_advanced, $system));
Столбец имеет логический тип.
Всякий раз, когда я получаю свою переменную из внешнего интерфейса, как это:
$ui_advanced = boolval(trim($_POST['ui_advanced']));
Я передаю 0 и 1, а затем возвращаю переменную и получаю false, true соответственно. Итак, я проверил, что мои переменные прошли правильно. Однако при передаче в запрос мой столбец обновляется только в том случае, если для переменной задано значение 1, а не 0, хотя я все еще получаю значения true и false.
Я решил это, просто используя:
intval($variable)
вместо этого и позволяя postgres справиться с этим, но почему бы не использовать истинную и ложную работу?
Я посмотрел ВОТ чтобы убедиться, что postgres допускает истину и ложь, то есть как php представляет истину, ложь.
Я запустил этот простой скрипт:
$var = boolval('1');
echo("True: ");
echo($var);
echo(" False: ");
$var = boolval(0);
echo($var);
Отсюда вывод:
True: 1 False:
Затем я посмотрел, почему печать False ничего не печатала, и меня привели к этому вопросу:
Почему PHP не печатает TRUE / FALSE?
Чтобы суммировать ответы на этот вопрос, Документация Php для строк говорит, что при печати true и false ожидаемые результаты ожидаются и записываются как:
Логическое значение TRUE преобразуется в строку «1». Логическое значение FALSE преобразуется в «» (пустая строка). Это позволяет преобразовывать между булевыми и строковыми значениями.
Других решений пока нет …