Postgresql insert array php

pg_insert

pg_insert() вставляет записи из массива assoc_array в таблицу table_name. Если задан аргумент options, значения массива будут преобразованы функцией pg_convert() соответствии с параметрами из этого аргумента.

Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

Список параметров

Ресурс соединения с базой данных PostgreSQL.

Имя таблицы для вставки данных. Количество колонок в таблице table_name должно быть не меньше, чем элементов в массиве assoc_array.

Ассоциативный массив(array), в котором ключи являются названиями колонок таблицы table_name, а значения — записи, которые необходимо вставить в эти колонки.

Комбинация констант PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_EXEC, PGSQL_DML_ASYNC и PGSQL_DML_STRING. Если в числе прочих передается PGSQL_DML_STRING в параметре options, функция вернет строку запроса.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. Возвращает строку(string), если PGSQL_DML_STRING включена в список параметров аргумента options.

Примеры

Пример #1 Пример использования pg_insert()
 $dbconn = pg_connect('dbname=foo'); // Это безопасно с тех пор как $_POST преобразуется автоматически $res = pg_insert($dbconn, 'post_log', $_POST); if ($res) < echo "Данные из POST успешно внесены в журнал\n"; >else

Смотрите также

Источник

pg_insert

pg_insert() вставляет записи из массива values в таблицу table_name .

Если flags указан, pg_convert() применяется к values с указанными флагами.

По умолчанию pg_insert() передаёт необработанные значения. Значения должны быть экранированы или опция PGSQL_DML_ESCAPE должна быть указана. PGSQL_DML_ESCAPE заключает в кавычки и экранирует параметры/идентификаторы. Поэтому имена таблиц/столбцов становятся чувствительными к регистру.

Обратите внимание, что ни экранирование, ни подготовленный запрос не защитят запрос LIKE, JSON, массив, регулярные выражения и т.д.. Эти параметры должны обрабатываться в соответствии с их контекстами, т.е. следует экранировать/проверять значения.

Список параметров

Имя таблицы для вставки данных. Количество колонок в таблице table_name должно быть не меньше, чем элементов в массиве values .

Ассоциативный массив( array ), в котором ключи являются названиями колонок таблицы table_name , а значения — записи, которые необходимо вставить в эти колонки.

Комбинация констант PGSQL_CONV_OPTS , PGSQL_DML_NO_CONV , PGSQL_DML_ESCAPE , PGSQL_DML_EXEC , PGSQL_DML_ASYNC и PGSQL_DML_STRING . Если в числе прочих передаётся PGSQL_DML_STRING в параметре flags , функция вернёт строку запроса. Если установлены PGSQL_DML_NO_CONV или PGSQL_DML_ESCAPE , то функция pg_convert() внутренне не вызывается.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.. Или возвращает строку( string ), если PGSQL_DML_STRING включена в список параметров аргумента flags .

Читайте также:  Javascript checkbox checked events

Список изменений

Версия Описание
8.1.0 Возвращает экземпляр PgSql\Result ; ранее возвращался ресурс (resource).
8.1.0 Параметр connection теперь ожидает экземпляр PgSql\Connection ; ранее ожидался ресурс (resource).

Примеры

Пример #1 Пример использования pg_insert()

$dbconn = pg_connect ( ‘dbname=foo’ );
// Это безопасно в некоторой степени, поскольку все значения экранируются.
// Однако PostgreSQL поддерживает JSON/массив. Для этих значений это не безопасно
// ни с через экранирование, ни с помощью подготовленного запроса.
$res = pg_insert ( $dbconn , ‘post_log’ , $_POST , PGSQL_DML_ESCAPE );
if ( $res ) echo «Данные из POST успешно внесены в журнал\n» ;
> else echo «Пользователь прислал неверные данные\n» ;
>
?>

Смотрите также

User Contributed Notes 10 notes

Returns SQL statement, slight improvement on the code from ‘rorezende at hotmail dot com’. This version adds bool values correctly.It also checks to make sure there is actually a value in the array before including it in the sql statement. (ie: null values or empty strings won’t be added to the sql statement)

function db_build_insert ( $table , $array )

$str = «insert into $table » ;
$strn = «(» ;
$strv = » VALUES (» ;
while(list( $name , $value ) = each ( $array ))

if( is_bool ( $value )) $strn .= » $name ,» ;
$strv .= ( $value ? «true» : «false» ) . «,» ;
continue;
>;

if( is_string ( $value )) $strn .= » $name ,» ;
$strv .= «‘ $value ‘,» ;
continue;
>
if (! is_null ( $value ) and ( $value != «» )) $strn .= » $name ,» ;
$strv .= » $value ,» ;
continue;
>
>
$strn [ strlen ( $strn )- 1 ] = ‘)’ ;
$strv [ strlen ( $strv )- 1 ] = ‘)’ ;
$str .= $strn . $strv ;
return $str ;

Beware of the following: pg_insert() and pg_update() are adding slashes to all character-like fields they work with. This makes them SQL injection super-safe, but there are unwanted consequences, as follows:

If you have a regular setup with magic_quotes_gcp=On, and you use pg_insert() or pg_update(), you will end up with fields that look as if you used addslashes() twice. To solve this, you can use stripslashes() on the data just before using it with pg_insert() or pg_update().

There’s another alternative, which seems better to me. Why make yourself crazy all over the code, adding slashes, stripping slashes, worrying whether magic_quotes_gpc is on or off and so on and so forth? Why do this, when the only place you actually need those slashes is right when you push the data into the database?

So why not get rid of your addslashes() and stripslashes() from all over your code, and turn magic_quotes_gcp off. As long as you always use pg_insert() and pg_update() to do your DB work, you’re SQL-injection safe AND slash-headache free.

Читайте также:  Java maven settings xml

If you need schema support, this function will do something similar to pg_insert:

function pg_insert_with_schema($connection, $table, $updates)
$schema = ‘public’;
if (strpos($table, ‘.’) !== false)
list($schema, $table) = explode(‘.’, $table);

if (count($updates) == 0) $sql = «INSERT INTO $schema.\»$table\» DEFAULT VALUES»;
return pg_query($sql);
> else $sql = «INSERT INTO $schema.\»$table\» «;

$sql .= ‘ values (‘;
for($i = 0; $i < count($updates); $i++)
$sql .= ($i != 0? ‘, ‘:»).’$’.($i+1);
$sql .= ‘)’;
return pg_query_params($connection, $sql, array_values($updates));
>
>

This function cannot be used to insert a record with only default values — i.e. with an assoc_array of array()

$Result = pg_query_params($db,’INSERT INTO table1 (a, b, c) VALUES ($1,$2,$3) RETURNING *’, array(‘1′,’2′,’3’);
$Row = pg_fetch_assoc($Result);
pg_insert($db, ‘table2’, $Row);

pg_insert fail silently if one or more fields on table2 have different names than on table1

Next version 🙂 My version checks whether value is bool, null, string or numeric and if one of the values is not function returns false if not. null values are inserted as NULL, bool as true or false and strings are add-shlashed before adding to query string. Note, that this function is not safe. SQL injection is possible with column names if you use $_POST or something similar as a $array.

function db_build_insert ( $table , $array ) if ( count ( $array )=== 0 ) return false ;
$columns = array_keys ( $array );
$values = array_values ( $array );
unset( $array );

for ( $i = 0 , $c = count ( $values ); $i$c ; ++ $i ) if ( is_bool ( $values [ $i ])) $values [ $i ] = $values [ $i ]? ‘true’ : ‘false’ ;
> elseif ( is_null ( $values [ $i ])) $values [ $i ] = ‘NULL’ ;
> elseif ( is_string ( $values [ $i ])) $values [ $i ] = «‘» . addslashes ( $values [ $i ]) . «‘» ;
> elseif (! is_numeric ( $values [ $i ])) return false ;
>
>

return «INSERT INTO $table ( $column_quote » . implode ( ‘, ‘ , $columns ) .
«) VALUES (» . implode ( ‘, ‘ , $values ) . «)» ;
>
?>

Today at work I isolated a problem I was having with this function to how I was formatting the date. I was assigning the date in my code as follows:

$today = date( «Ymd» ); // ISO 8601

This format is acceptable to PostgreSQL, as verified by their documentation and buy tests using psql. However, to make it work in my code, I had to make the following change:

$today = date( «Y-m-d» ); // also ISO 8601 format

Time is money, then I write a function similar to pg_insert in PHP (only output sql statement) :

$str = «insert into $table («;
while(list($name,$value) = each($array)) <
$str .= «$name,»;
>
$str[strlen($str)-1] = ‘)’;
$str .= » values («;
reset($array);
while(list($name,$value) = each($array)) <
if(is_string($value))
$str .= «‘$value’,»;
else
$str .= «$value,»;
>
$str[strlen($str)-1] = ‘)’;
$str .= «;» ;

Читайте также:  Определить нажатие кнопки php

Had a few issues while trying to run this in PHP 4.4.0:

— I could not get it to work with column names that are SQL reserved words (example: desc, order). I was forced to change the column names in order to use the function. I could not put the column names in quotes, because that caused pg_convert() to fail.

— Function was returning false until I passed the PGSQL_DML_EXEC option.

  • Функции PostgreSQL
    • pg_​affected_​rows
    • pg_​cancel_​query
    • pg_​client_​encoding
    • pg_​close
    • pg_​connect_​poll
    • pg_​connect
    • pg_​connection_​busy
    • pg_​connection_​reset
    • pg_​connection_​status
    • pg_​consume_​input
    • pg_​convert
    • pg_​copy_​from
    • pg_​copy_​to
    • pg_​dbname
    • pg_​delete
    • pg_​end_​copy
    • pg_​escape_​bytea
    • pg_​escape_​identifier
    • pg_​escape_​literal
    • pg_​escape_​string
    • pg_​execute
    • pg_​fetch_​all_​columns
    • pg_​fetch_​all
    • pg_​fetch_​array
    • pg_​fetch_​assoc
    • pg_​fetch_​object
    • pg_​fetch_​result
    • pg_​fetch_​row
    • pg_​field_​is_​null
    • pg_​field_​name
    • pg_​field_​num
    • pg_​field_​prtlen
    • pg_​field_​size
    • pg_​field_​table
    • pg_​field_​type_​oid
    • pg_​field_​type
    • pg_​flush
    • pg_​free_​result
    • pg_​get_​notify
    • pg_​get_​pid
    • pg_​get_​result
    • pg_​host
    • pg_​insert
    • pg_​last_​error
    • pg_​last_​notice
    • pg_​last_​oid
    • pg_​lo_​close
    • pg_​lo_​create
    • pg_​lo_​export
    • pg_​lo_​import
    • pg_​lo_​open
    • pg_​lo_​read_​all
    • pg_​lo_​read
    • pg_​lo_​seek
    • pg_​lo_​tell
    • pg_​lo_​truncate
    • pg_​lo_​unlink
    • pg_​lo_​write
    • pg_​meta_​data
    • pg_​num_​fields
    • pg_​num_​rows
    • pg_​options
    • pg_​parameter_​status
    • pg_​pconnect
    • pg_​ping
    • pg_​port
    • pg_​prepare
    • pg_​put_​line
    • pg_​query_​params
    • pg_​query
    • pg_​result_​error_​field
    • pg_​result_​error
    • pg_​result_​seek
    • pg_​result_​status
    • pg_​select
    • pg_​send_​execute
    • pg_​send_​prepare
    • pg_​send_​query_​params
    • pg_​send_​query
    • pg_​set_​client_​encoding
    • pg_​set_​error_​verbosity
    • pg_​socket
    • pg_​trace
    • pg_​transaction_​status
    • pg_​tty
    • pg_​unescape_​bytea
    • pg_​untrace
    • pg_​update
    • pg_​version

    Источник

    pg_insert

    pg_insert() вставляет записи из массива assoc_array в таблицу table_name . Если задан аргумент options , значения массива будут преобразованы функцией pg_convert() соответствии с параметрами из этого аргумента.

    Список параметров

    Ресурс соединения с базой данных PostgreSQL.

    Имя таблицы для вставки данных. Количество колонок в таблице table_name должно быть не меньше, чем элементов в массиве assoc_array .

    Ассоциативный массив( array ), в котором ключи являются названиями колонок таблицы table_name , а значения — записи, которые необходимо вставить в эти колонки.

    Комбинация констант PGSQL_CONV_OPTS , PGSQL_DML_NO_CONV , PGSQL_DML_ESCAPE , PGSQL_DML_EXEC , PGSQL_DML_ASYNC и PGSQL_DML_STRING . Если в числе прочих передается PGSQL_DML_STRING в параметре options , функция вернет строку запроса. Если установлены PGSQL_DML_NO_CONV или PGSQL_DML_ESCAPE , то функция pg_convert() внутренне не вызывается.

    Возвращаемые значения

    Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. Возвращает строку( string ), если PGSQL_DML_STRING включена в список параметров аргумента options .

    Примеры

    Пример #1 Пример использования pg_insert()

    $dbconn = pg_connect ( ‘dbname=foo’ );
    // Это безопасно с тех пор как $_POST преобразуется автоматически
    $res = pg_insert ( $dbconn , ‘post_log’ , $_POST );
    if ( $res ) echo «Данные из POST успешно внесены в журнал\n» ;
    > else echo «Пользователь прислал неверные данные\n» ;
    >
    ?>

    Список изменений

    Версия Описание
    5.6.0 Больше не является экспериментальной. Добавлена константа PGSQL_DML_ESCAPE , TRUE / FALSE и NULL типы данных теперь поддерживаются.
    5.5.3/5.4.19 Исправлены прямые SQL-инъекции в table_name и непрямые SQL-инъекции в идентификаторах.

    Смотрите также

    Источник

Оцените статью