【问题标题】:PostgreSQL query works but not with phpPostgreSQL 查询有效,但不适用于 php
【发布时间】:2013-01-03 03:26:46
【问题描述】:

我想对 PostgreSQL 数据库进行 php 查询。我在服务器中测试了查询并返回,但是当我在 php 中尝试时:

<?php

//Check the input
if (!isset($_POST['variable']))
echo "Address not selected";

$input = $_POST['variable'];
//$input = ucfirst(trim($_POST['variable']));
//echo $input;


$conn = pg_connect("host=localhost port=5432 dbname=geocoder user=postgres");
if (!$conn)
echo "Could not connect to server..";

$sql = "SELECT (addy).stateabbrev FROM geocode($input);";
$result = pg_query($conn, $sql);

if  (!$result)
    echo "Query did not executed..";

?>

我知道“查询没有执行..”;

QUERY 的字符串取自使用 javascript 的 html 页面。

在 Apache2 的 error.log 中我得到:

PHP 警告:pg_query():查询失败:错误:“Penn”或附近的语法错误\nLINE 1:SELECT (addy).stateabbrev FROM geocode(O

这里有什么意义?

【问题讨论】:

  • 您应该在 SQL 中使用占位符而不是插值,并且您应该验证/清理输入。
  • 您遇到了 SQL 注入。立即了解这一点:bobby-tables.com
  • 使用 $input = pg_escape_string($_POST['variable']);没有帮助
  • 您可能想考虑在您的代码中添加错误检查。它在 php 中非常简单,并且在事情不工作时非常有用。假设你已经得到了一个输入,假设你已经连接到数据库,并且假设你得到了一个结果,这些都是错误的形式。每次检查是否有错误。

标签: postgresql php


【解决方案1】:

我设法找到了问题,即 geocode() 函数中的 $input 变量必须用单引号括起来:

geocode('$input')

:)

【讨论】:

    【解决方案2】:

    清理用户提供的数据:

    $input = pg_escape_literal($conn, $input);
    $sql = "SELECT (addy).stateabbrev FROM geocode($input);";
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 2021-04-23
      • 2021-06-21
      • 2012-12-17
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多