PHP postgres传递参数

时间:2017-06-11 15:13:47

标签: php postgresql postgresql-9.2

我是PHP的新手,我正在使用一些现有的代码。代码的作者向我建议:

// My lines
$_cp_sql .= " SET SESSION "."my.tech"." = :my_current_user";
$res_prepare = prepare_db($conn, $_cp_sql);
$res_bind = bind_param_db($res_prepare, ':my_current_user' , $current_user );
$res_ex = execute_prepared_db($res_prepare,0);

注意:prepare_db和所有其他functions_db是作者创建的PDO函数,与MYSQL,Postgres和SQLITE兼容。

我的案子是Postgres。但是执行产生了这个错误,经过几天的阅读,我仍然不明白为什么。我做错了什么?

The DBMS server said: SQLSTATE[42601]: Syntax error: 7 
ERROR: syntax error at or near "$1" LINE 1: SET SESSION my.tech = $1 ^

1 个答案:

答案 0 :(得分:1)

我不认为这与PostgreSQL有任何关系。这是PHP,它在所有方面都很糟糕。

// My lines
$_cp_sql .= " SET SESSION "."my.tech"." = :my_current_user";

首先它与......相同。

$_cp_sql .= " SET SESSION my.tech = :my_current_user";

其次,我不认为SET会准备好陈述。来自the docs on PREPARE

  

任何SELECT,INSERT,UPDATE,DELETE或VALUES语句。

因此,向prepare_dbexecute_prepared_db SET提供php无论如何都没有任何意义。

羞涩的是,prepare_db是一种可怕的语言,我甚至不确定为您bind_param_dbexecute_prepared_db或{{1}}提供什么。我相信,尽管作者有意,但作者并不了解SQL。我会在其他地方寻找不同的代码。