【问题标题】:Checking return value of pg_query_params by PHP通过 PHP 检查 pg_query_params 的返回值
【发布时间】:2010-11-23 23:11:51
【问题描述】:

如何在 PHP 的 pg query params 中检查资源是否为假?

我运行以下代码失败

 $row = pg_num_rows ( $result );
 if ( $row !== 0 )
        echo "hurray";
 else
        echo "argh";

它给了我以下警告

Warning: pg_query_params() [function.pg-query-params]: Query failed: ERROR: invalid input syntax for integer: "" in /var/www/codes/index.php on line 120

我使用$dbconn 这是正确的,所以第二个警告似乎只是一个症状。 原因是整数类型无效。

我的查询是这样的

$dbconn = pg_connect("host=localhost port=5432 dbname=masi user=masi password=123");
$result = pg_query_params ( $dbconn,
    'SELECT question_id
    FROM questions
    WHERE question_id = $1',
    array ( $question_id )
);

【问题讨论】:

  • 您传递给 pg_query_params() 的查询似乎有问题。最好回滚编辑,以便下面的答案继续有意义,并发布一个新问题。并且不要忘记包含导致错误的确切 pg_query_params(...) 调用,否则只能猜测问题所在。

标签: php postgresql


【解决方案1】:

试试这个:

$result = @pg_query_params($dbconn, "SELECT * FROM SOME_TABLE", array());
if($result !== FALSE)
{
  $row = @pg_num_rows($result);
  if ( $row !== 0 )
         echo "hurray";
  else
         echo "argh";
}
else
{
  echo "Seems, your query is bad.";
}

在使用 $result 之前,您需要检查它。

【讨论】:

  • 虽然使用 !== 检查 FALSE 通常是个好主意,但在这种情况下它并不重要。查询结果永远不会是布尔值 FALSE 以外的任何其他类型的 false。
  • 这个if($result !== FALSE) -clause 是多余的,因为它对我来说从来都不是真的,尽管它应该是因为我可以从我的数据库中看到数据。
  • 当然,你可以从你的数据库中看到数据,但是如果你的 $result 是 FALSE,那么你的查询语法是错误的。可以向我展示您的查询吗?
  • @Vitaly:我将查询添加到我的问题中。
  • 你的查询必须是单引号,因为用双引号php解析$1,没错: $result = pg_query_params ( $dbconn, 'SELECT question_id FROM questions WHERE question_id = $1', array ( $question_id ) );
【解决方案2】:

当您说“NULL 查询”时,我假设您的意思是不影响或返回任何结果行的查询。

任何成功的查询都将始终产生有效的查询结果资源,无论是否有任何行受到影响/返回,这始终是正确的。要查看查询是否成功应用于一行或多行,您必须使用 pg_affected_rows (UPDATE/INSERT/DELETE) 或 pg_num_rows (SELECT)。

【讨论】:

  • 我在我的代码中发现了一个关于使用pg_num_rows 的错误。请看我更新的问题。
  • 我在 Psql 中运行查询 SELECT * FROM questions 并且工作正常。 - 我认为问题不在查询中。
猜你喜欢
  • 2015-04-18
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2013-12-02
  • 2013-07-24
  • 2023-04-11
  • 2012-02-18
  • 1970-01-01
相关资源
最近更新 更多