【问题标题】:insert special characters into a Postgresql database将特殊字符插入 Postgresql 数据库
【发布时间】:2012-03-24 06:59:27
【问题描述】:

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

?>

【问题讨论】:

    标签: php postgresql insert special-characters


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你有几个选择:

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

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

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

      首选最后一个选项。

      【讨论】:

        猜你喜欢
        • 2020-08-30
        • 2018-02-26
        • 2016-02-18
        • 2021-03-27
        • 2011-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多