准备好的声明不存在

时间:2013-06-03 18:10:52

标签: php sql postgresql prepared-statement

我正在尝试根据新用户的输入更新我的日历标题。

变量如下:

$titleNew = 'New Title'
$titleOld = 'Old Title'

旧标题存在于数据库中并应相应更新,但是使用此代码我收到一条错误消息,指出我的预准备语句不存在。

$result = pg_prepare($conn, "update", "UPDATE calendar SET title = $1 WHERE title LIKE $2");

$result = pg_execute($conn, "update", array($titleNew, $titleOld));

1 个答案:

答案 0 :(得分:2)

要查明表calendar是否实际存在于您连接的数据库中,请在同一会话中运行:

SELECT n.nspname As schema_name, c.relname As tbl_name
FROM   pg_class c
JOIN   pg_namespace n ON n.oid = c.relnamespace
WHERE  c.relname ILIKE 'calendar';

我怀疑潜在的问题是与表名或连接参数的混淆。你可能有:

  • 混淆数据库。
  • 混淆了港口。
  • 一个search_path设置,不包含该表所在的架构。 检查您的search_path:SHOW search_path;
    是否包含架构名称?
  • 拼错了表名。
  • 将双引号的混合外壳名称(如"Calendar")与(通常更可取的)小写名称calendar混淆。

如果您的search_path中没有实际架构:请正确设置search_path架构限定表名:

UPDATE calendar.calendar SET title = $1 WHERE title = $2