将特殊字符插入Postgresql数据库

时间:2012-03-06 18:34:59

标签: php postgresql insert special-characters

我有一个php脚本,它返回一些带有特殊字符的值,特别是单引号(')和'at符号'(@)。包含这些字符的值不会插入到数据库中。我在mysql数据库上看到了一个帖子(http://stackoverflow.com/questions/2584066/php-how-to-insert-special-characters-into-a-database)。 我的问题是如何在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 个答案:

答案 0 :(得分:2)

使用pg_query_params(),这是避免SQL注入的最简单方法。因此引用'和其他有风险的东西。

答案 1 :(得分:1)

您有以下几种选择:

  • 您可以包装动态数据pg_escape_string()(以及其他类型的相关函数)以正确编码特殊字符。这将需要对您发布的代码进行最少量的更改。

  • 您可以使用预准备语句并将动态数据绑定为参数。有关如何执行此操作的示例,请参阅pg_prepare()的文档。准备好的陈述是recommended way to protect against SQL Injection

  • 您可以将PDO与参数化查询结合使用。这为您提供了参数化查询和通用数据库抽象层的安全性和性能优势。

最后一个选项是首选。