pg_fetch_assoc
pg_fetch_assoc() возвращает ассоциативный массив, содержащий записи из строки результата запроса.
Результат выполнения pg_fetch_assoc() тот же, что и у pg_fetch_array() с параметром PGSQL_ASSOC . Функция возвращает только ассоциативный массив. Если нужен численно-индексированный массив, используйте функцию pg_fetch_row() .
Замечание: Эта функция устанавливает NULL-поля в значение null PHP.
pg_fetch_assoc() не намного медленней и значительно проще в использовании, чем pg_fetch_row() .
Список параметров
Экземпляр PgSql\Result , возвращаемый функциями pg_query() , pg_query_params() или pg_execute() (среди прочего).
Номер выбираемой из результата запроса строки. Нумерация начинается с нуля. Если аргумент опущен или равен null , берётся следующая по очереди строка.
Возвращаемые значения
Ассоциативный массив, индексированный именами полей выборки. Значения массива представляются в виде текстовых строк. Значения NULL базы данных преобразуются в PHP null .
false , если row превышает число строк в результате запроса, когда строк в результате не осталось, и при прочих ошибках.
Список изменений
Примеры
Пример #1 Пример использования pg_fetch_assoc()
$conn = pg_connect ( «dbname=publisher» );
if (! $conn ) echo «Произошла ошибка.\n» ;
exit;
>
?php
$result = pg_query ( $conn , «SELECT id, author, email FROM authors» );
if (! $result ) echo «Произошла ошибка.\n» ;
exit;
>
while ( $row = pg_fetch_assoc ( $result )) echo $row [ ‘id’ ];
echo $row [ ‘author’ ];
echo $row [ ’email’ ];
>
?>
Смотрите также
- pg_fetch_row() — Выбирает строку результата запроса и помещает данные в массив
- pg_fetch_array() — Возвращает строку результата в виде массива
- pg_fetch_object() — Выбирает строку результата запроса и возвращает данные в виде объекта
- pg_fetch_result() — Возвращает запись из результата запроса
User Contributed Notes 17 notes
Note that all pg_fetch_* function ignoring the original type of the data and always return strings. (for numbers too)
PostgreSQL boolean values set to TRUE are returned as the string «t»
PostgreSQL boolean values set to FALSE are returned as the string «f»
If you are moving between different versions of PHP, this might be handy:
if (!function_exists(‘pg_fetch_assoc’)) function pg_fetch_assoc ($result)
return @pg_fetch_array($result, NULL, PGSQL_ASSOC);
>
>
Beware! If your query returns multiple columns with the same names, only the right-most one will be contained in the result array. This can cause problems if you are using a combination of joins:
For example:
// Let’s say that ‘pkey’ is the primary-key colum for tables a and b (primary keys are never null)
$res = pg_query ( «Select a.pkey, b.* FROM a LEFT JOIN b using (pkey)» );
$data = pg_fetch_assoc ( $res );
var_dump ( $data [ ‘pkey’ ]) // Is actually b.pkey, may be NULL!
?>
Both tables contain a column named ‘pkey’. Now table ‘b’ is on the optional side of a LEFT JOIN, so b.pkey (implicitly included via ‘b.*’) may be NULL.
The problem arises when you use pg_fetch_assoc(), there are two columns named ‘pkey’ but the result array can only contain one value per key — in this case it will pick the one from table B instead of the one from table A, and since B is on the optional side of the left-join, $data[‘pkey’] may be NULL. So if you’re expecting to retrieve the column from table A, you need to use a different pg_fetch() or rewrite your query to avoid ambiguity.
Converts ‘t’ and ‘f’ to PHP Boolean
while ( $row = pg_fetch_assoc( $result ) )
fixBooleans($result, $row);
function fixBooleans($result, &$row)
for ($fld_i = 0; $fld_i < pg_num_fields($result); $fld_i++)
$fld_name = pg_field_name($result, $fld_i);
if( pg_field_type($result, $fld_i) == ‘bool’ )
if( $row[ $fld_name ] == ‘t’ )
$row[ $fld_name ] = true;
>
elseif($row[ $fld_name ] == ‘f’)
$row[ $fld_name ] = false;
>
>
>
// keuzemenu met alle leerkrachten
function leerkrachten ( $aName ) include( «includes/connect.php» );
>
// keuzemenu met alle vakken
function vakken ( $aID ) include( «includes/connect.php» );
$SelectVakkenQuery = «SELECT * FROM vakken» ;
$SelectVakkenResult = $mysqli -> query ( $SelectVakkenQuery );
$Choice = » $aID ‘ onchange=waarde()>» ;
while( $rij2 = $SelectVakkenResult -> fetch_assoc ()) $VakID = $rij2 [ ‘vakid’ ];
$Vaknaam = $rij2 [ ‘voluit’ ];
$Choice .= »» ;
>
$Choice .= «» ;
return $Choice ;
>
?>
include( «includes/connect.php» );
// aanmaken van keuzemenus
// eerste keuzemenu
echo vakken ( «optVakken» ). «
» ;
// tweede keuzemenu
if(!isset( $_POST [ ‘txthidden’ ])) $SelectLeerkrachtenQuery = «SELECT * FROM leerkrachten» ;
$SelectLeerkrachtResult = $mysqli -> query ( $SelectLeerkrachtenQuery );
$Choice = «
» ;
echo $Choice ;
>else $vakid = $_POST [ ‘txthidden’ ];
$SelectLeerkrachtenQuery = «SELECT * FROM leerkrachten JOIN leerkrachtpervak ON leerkrachten.leerkrachtid = leerkrachtpervak.leerkrachtid WHERE vakid = ‘ $vakid ‘» ;
$SelectLeerkrachtResult = $mysqli -> query ( $SelectLeerkrachtenQuery );
$Choice = «
» ;
echo $Choice ;
>
// onzichtbaar textbox voor JS
echo » » ;
$mysqli -> close ();
?>