вставлять специальные символы в базу данных Postgresql - PullRequest
2 голосов
/ 06 марта 2012

У меня есть скрипт php, который возвращает некоторые значения со специальными символами, особенно одинарные кавычки (') и знак' at '(@). Значения, содержащие эти символы, не вставляются в базу данных. Я видел сообщение об этом в базе данных mysql по адресу (/2164577/kak-vstavit-spetsialnye-simvoly-v-bazu-dannyh). Мой вопрос: как это можно сделать в базе данных Postgresql?

Смотрите ниже код php:

<?php
require 'table.php';


// Opens a connection to a PostgresSQL server
$connection = pg_connect("dbname=postgis user=postgres password=local");


// Execute query        

foreach ($xml->item as $entry){ 
$georss = $entry->children($namespaces['georss']);
list($lat, $lng) = explode(' ', (string)$georss->point);
$query = "INSERT INTO geognews(title, link, author, latitude, longitude) VALUES ('" . $entry->title . "', '" . $entry->link . "', '" . $entry->children($namespaces['dc'])->creator . "', '" . $lat . "', '" . $lng . "')";

$result = pg_query($query);
printf ("These values are inserted into the database - %s %s %s", $entry->title, $entry->link, $entry->children($namespaces['dc'])->creator, $lat, $lng);
}

pg_close();

?>

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Используйте pg_query_params () , безусловно, самый простой способ избежать внедрения SQL.И, таким образом, цитаты и другие опасные вещи.

1 голос
/ 06 марта 2012

У вас есть несколько вариантов:

  • Вы можете переносить динамические данные pg_escape_string() (и связанные с ними функции для других типов) для правильного кодирования специальных символов. Это потребует наименьшего количества изменений в коде, который вы опубликовали.

  • Вы можете использовать подготовленные операторы и привязывать ваши динамические данные в качестве параметров. См. Документы для pg_prepare() для примеров того, как это сделать. Подготовленные операторы - это рекомендуемый способ защиты от SQL-инъекций .

  • Вы можете использовать PDO с параметризованными запросами. Это дает вам преимущества безопасности и производительности параметризованных запросов плюс универсальный уровень абстракции базы данных.

Последний вариант предпочтителен.

...