【问题标题】:PostgreSQL doesn't insert values into table?PostgreSQL 不向表中插入值?
【发布时间】:2013-01-08 06:43:33
【问题描述】:

我正在编写一个在我的 PostgreSQL 数据库上运行查询的 PHP 代码:

$insert = pg_query($pg_conn, 
"INSERT INTO kullanicilar(id, u_name, u_firstname, u_lastname, register_date, gold, exp, play_times, level)
VALUES($k_id, '$u_name', '$u_firstname', '$u_lastname', 'NOW()', 0, 0, 0, 1);"
);

if ($insert) {
    echo 'Insert succeeded.';
} else {
    echo 'An error occurs when inserting';
}

我每次都收到插入消息时出错。我的代码有什么问题?

-编辑-(详细信息)

我正在使用 Heroku Postgres。我的变量定义是这样的;

$k_id = intval($basic['id']); //int
$u_name = $basic['name']; //string
$u_firstname = $basic['first_name']; //string
$u_lastname = $basic['last_name']; //string

这是我的heroku日志的一部分:

PHP Warning:  pg_pconnect(): Unable to connect to Postg
reSQL server: could not connect to server: Connection refused\n\tIs the server r
unning on host "-----.amazonaws.com" and accepting\n\tTCP/
IP connections on port 5432? in /app/www/index.php on line 91, referer: http://a
pps.facebook.com/---/

PHP Warning:  pg_last_error() expects parameter 1 to be
resource, boolean given in /app/www/index.php on line 119, referer: http://apps
.facebook.com/---/

PHP Warning:  pg_num_rows() expects parameter 1 to be r
esource, null given in /app/www/index.php on line 106, referer: http://apps.face
book.com/---/

PHP Warning:  pg_query() expects parameter 1 to be reso
urce, boolean given in /app/www/index.php on line 107, referer: http://apps.face
book.com/---/

PHP Warning:  pg_last_error(): No PostgreSQL link opene
d yet in /app/www/index.php on line 111, referer: http://apps.facebook.com/---/

PHP Warning:  pg_query() expects parameter 1 to be reso
urce, boolean given in /app/www/index.php on line 98, referer: http://apps.faceb
ook.com/---/

【问题讨论】:

  • 使用 pg_query_params() 避免 SQL 注入。
  • 我找到了这个php.net/manual/en/function.pg-query-params.php,但我不知道应该添加什么作为第三个参数params。换句话说,我不知道pg_query_params ($pg_conn, $myquery , x ) 中的x。谢谢。
  • 错误是什么
  • 无法连接到服务器这是你的问题。连连接都不上,那怎么插东西呢?
  • 是的,这是真的。这是一个连接问题。并通过将 port=5482sslmode=require 告诉 pg_pconnect 来解决。

标签: php database postgresql


【解决方案1】:

如果register_date 应该是timestamp(带时区),它应该是now()(不带单引号,函数调用)而不是'now()'(带单引号,字符串文字) .

Postgres 发出更详细的错误消息。检查数据库日志。

pgAdmin 只是一个 GUI。如果它驻留在客户端上,它可能根本无法访问服务器上的日志文件。如果它驻留在同一台机器上,则只需正确配置即可。

每个配置得体的 Postgres 服务器都会写入日志文件。查看postgresql.conf at the settings described here 以查找或配置位置。

【讨论】:

  • Erwin Brandstetter,仍然无法正常工作。我删除了 now() 的引号,但仍然存在相同的错误。
  • @MehmetEminAcar:没有更多信息,剩下的只是一个猜谜游戏。按照 Frank 的链接或查看数据库日志以获取更详细的错误消息。
  • 我使用了 echo pg_last_error(); 它没有给我错误。我正在使用 pgAdmin 3。当我查看服务器状态的日志部分时,它显示“日志不适用于此服务器”。
  • @MehmetEminAcar:我在答案中添加了一段关于日志文件的内容。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2020-08-17
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2018-03-14
  • 1970-01-01
相关资源
最近更新 更多