我是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 ^
答案 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_db
和execute_prepared_db
SET
提供php
无论如何都没有任何意义。
羞涩的是,prepare_db
是一种可怕的语言,我甚至不确定为您bind_param_db
,execute_prepared_db
或{{1}}提供什么。我相信,尽管作者有意,但作者并不了解SQL。我会在其他地方寻找不同的代码。