我想在PDO准备好的查询中绑定sysdate函数:
$db = new PDO('oci:dbname=database;charset=UTF8', 'user', 'pass');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $db->prepare('SELECT :func FROM DUAL');
$query->execute(array(':func' => 'SYSDATE()'));
var_dump($query->fetch());
结果返回:
array (size=2)
':FUNC' => string 'SYSDATE()' (length=9)
0 => string 'SYSDATE()' (length=9)
我想获取我的oracle数据库的系统日期。有可能吗?
你能帮我制作一招吗?
答案 0 :(得分:-1)
绑定参数是一种注入数据(如数字或字符串文字)的工具,并确保它们不会成为代码。但是,您要求完全相反:您希望数据成为代码。所以我担心你根本不能使用这种技术。
您必须使用良好的旧PHP字符串操作函数动态编写SQL,例如:
$sql = sprintf('SELECT %s AS "result" FROM DUAL', 'SYSDATE');
毋庸置疑,出于明显的安全原因,您绝不应允许免费输入。如果您想切换功能,最好遵循白名单方法,例如:
switch (filter_input(INPUT_POST, 'option')) {
case 'time':
$function = 'SYSDATE';
break;
// ... more case statements
default:
$function = null;
}
if (!is_null($function)) {
$sql = sprintf('SELECT %s AS result FROM DUAL', $function);
// ...
}
答案 1 :(得分:-1)
Oracle(通过PHP中的OCI module) 支持IN
and OUT
binds。它们用于运行PL/SQL
并返回结果。在您的情况下,运行简单的SQL
SELECT
声明,您不需要这样做。
请注意SYSDATE
不是函数,因此您不能使用括号。
以下是使用PDO
:
$db = new PDO('oci:dbname=database;charset=UTF8', 'user', 'pass');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $db->prepare('SELECT SYSDATE FROM DUAL');
$query->execute();
var_dump($query->fetch());