Как исправить, Invalid text representation: 7 ERROR: invalid input syntax for type boolean?
достал все записи из бд, тут же записываю их обратно (update .. )
появляется ошибка:
SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type boolean: ""' in
в чем ошибка понять не могу, странно то, что такая ошибка не со всеми записями, а с некоторыми. и понять в чем ошибка, не могу. помогите пожалуйста
Banny_Boom: если ты достал значение из БД - это еще не значит что в запросе будет то же самое значение)
У тебя запрос с именованными псевдопеременными, используй что-то вроде
$sth->bindValue(':sex', $sex, PDO::PARAM_BOOL);
как советовали ниже. Подробнее тут php.net/manual/ru/pdostatement.bindvalue.php
Oleg Pavlov: я бы с радостью делал так, но проблема в том, что запрос генерируется классом для работы с бд, и я не знаю когда и какой параметр будет, и параметров очень много, так что я не могу каждый отдельно биндить, поэтому и делаю массивом :c
Есть ещё какие-то варианты :c
кажется нашел, ошибка возникает когда в поле boolean пихаю bool значение, когда делаю null, то все нормально, а когда true/false в boolean, то ошибка, странно
Banny_Boom: Вы не указываете тип параметра, php.net/manual/ru/pdo.constants.php, а по умолчанию, емнип, используется PDO::PARAM_STR, в результате ваш false, превращается в "false" и запрос выглядит так:
UPDATE public.users SET sex="false" WHERE login="login" , а false должен идти без кавычек. Попробуйте использовать так :
$statements = $connection->prepare("UPDATE public.users SET sex=:sex WHERE login=:login");
$statement->bindParam('login', $login, \PDO::PARAM_STR);
$statement->bindValue('sex', 0, \PDO::PARAM_BOOL); //bindValue тут, потому, что передаём значение, а не ссылку, для переменной можно использовать bindParam. По значениям - 0 => false, 1 => true
Wol_fi: я бы с радостью делал так, но проблема в том, что запрос генерируется классом для работы с бд, и я не знаю когда и какой параметр будет, и параметров очень много, так что я не могу каждый отдельно биндить, поэтому и делаю массивом :c
Есть ещё какие-то варианты :c