PHP.mk документација

pg_insert

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.pg-insert.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.pg-insert.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
pg_insert

Референца за `function.pg-insert.php` со подобрена типографија и навигација.

function.pg-insert.php

pg_insert

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

pg_insert Вметни низа во табела

= NULL

pg_insert(
         PgSql\Connection $connection,
         string $table_name,
         array $values,
         int $flags = PGSQL_DML_EXEC
): PgSql\Result|string|bool

pg_insert() ги вметнува вредностите од values во табелата специфицирана од table_name.

Враќа flags се специфицира, pg_convert() се применува на values со специфицираните знаменца.

Стандардно pg_insert() пропушта сурови вредности. Вредностите мора да бидат избегнати или PGSQL_DML_ESCAPE знаменцето мора да биде специфицирано во flags. PGSQL_DML_ESCAPE цитати и избегнува параметри/идентификатори. Затоа, имињата на табелите/колоните стануваат чувствителни на големи и мали букви.

Имајте предвид дека ниту избегнувањето ниту подготвеното барање не можат да заштитат LIKE барање, JSON, Низа, Regex, итн. Овие параметри треба да се третираат според нивните контексти. т.е. Избегнувајте/потврдете вредности.

Параметри

connection

Еден PgSql\Connection instance.

table_name

Име на табелата во која да се вметнат редови. Табелата table_name мора да има барем онолку колони колку што values има елементи.

values

Еден array чии клучеви се имиња на полиња во табелата table_name, и чии вредности се вредностите на оние полиња што треба да се вметнат.

flags

Податоци за конвертирање. PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC or PGSQL_DML_STRING комбинирано. Ако PGSQL_DML_STRING е дел од flags тогаш се враќа стринг од барањето. Кога PGSQL_DML_NO_CONV or PGSQL_DML_ESCAPE е поставено, не го повикува pg_convert() internally.

Вратени вредности

Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.. Или враќа string при успех ако PGSQL_DML_STRING се пропушта преку flags.

Errors/Exceptions

А ValueError се фрла кога специфицираната табела е невалидна.

А ValueError or TypeError на конвертирани вредности, или

Дневник на промени

Верзија = NULL
8.3.0 Сега фрла ValueError грешка кога специфицираната табела е невалидна; претходно E_WARNING кога дадениот стринг не може да се десериализира; претходно
8.3.0 Сега фрла ValueError or TypeError се фрла кога вредноста или типот на полето не се совпаѓаат правилно со типот на PostgreSQL. E_WARNING кога дадениот стринг не може да се десериализира; претходно
8.1.0 Враќа PgSql\Result инстанца сега; претходно, а resource .
8.1.0 На connection параметарот очекува PgSql\Connection инстанца сега; претходно, а resource се очекуваше.

Примери

Пример #1 pg_insert() example

<?php
$dbconn
= pg_connect('dbname=foo');
// This is safe somewhat, since all values are escaped.
// However PostgreSQL supports JSON/Array. These are not
// safe by neither escape nor prepared query.
$res = pg_insert($dbconn, 'post_log', $_POST, PGSQL_DML_ESCAPE);
if (
$res) {
echo
"POST data is successfully logged\n";
} else {
echo
"User must have sent wrong inputs\n";
}
?>

Види Исто така

  • pg_convert() - Конвертирање на вредностите на асоцијативниот список во форми погодни за SQL изјави

Белешки од корисници 9 белешки

shane at treesandthings dot com
пред 22 години
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)

<?PHP
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;

}
?>
skippy на zuavra точка net
21 години пред
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.
jsnell на e-normous точка com
пред 18 години
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 .= '("';
 $sql .= join('", "', array_keys($updates));
 $sql .= '")';

 $sql .= ' values (';
 for($i = 0; $i < count($updates); $i++)
   $sql .= ($i != 0? ', ':'').'$'.($i+1);
 $sql .= ')';
 return pg_query_params($connection, $sql, array_values($updates));
 }
}
phpuser at ego dot gen dot nz
пред 14 години
This function cannot be used to insert a record with only default values - i.e. with an assoc_array of array()
Анонимен
пред 4 години
$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
mina86 на tlen dot pl
21 години пред
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.

<?php
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) . ")";
}
?>
excalibur at nospam dot icehouse dot net
19 години пред
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
rorezende at hotmail dot com
пред 22 години
Time is money, then I write a function similar to pg_insert in PHP (only output sql statement) :

   function db_mount_insert($table,$array) {

    $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 .= ";"    ;
    
    return $str;

   }
ANDYCHR17 at HOTMAIL dot COM
19 години пред
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.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.