Как вы компилируете целочисленные данные в Postgres через PHP?
Мои целые числа являются строками, как показано ниже: var_dump ( $_SESSION )
'logged_in' => int 1
'user_id' => string '9' (length=1) // should be int
'a_moderator' => string '0' (length=1) // should be int
Я компилирую значения следующим кодом, который, очевидно, является источником проблемы после pg_prepare
и pg_execute
.
while ( $row = pg_fetch_array( $result ) ) {
$user_id = $row['user_id'];
}
Вы можете преобразовать строки в целые числа, используя intval:
$str = "5";
$num = intval($str);
или по типу принуждения:
$str = "5";
$num = (int) $str;
//this works too
$num = (integer) $str;
некоторый тестовый код:
<?php
$str = "10";
$num = intval($str);
//$num = (int)$str;
if ($str === 10) echo "String";
if ($num === 10) echo "Integer";
?>
Дальнейшее чтение:
Обычным для расширений базы данных PHP является возвращение всех типов данных в виде строки, поскольку некоторые типы данных SQL не могут быть представлены в родных типах данных PHP.
Пример: PostgreSQL BIGINT
(8-байтовый целочисленный тип данных) переполнил бы тип int
PHP (если только PHP не был скомпилирован с поддержкой 64-разрядной версии) и должен быть отличен как float
, который может потерять точность.