PHP / Oracle-OCI不喜欢我的数据类型吗?

时间:2019-09-20 14:30:08

标签: php oracle oracle12c oci datagrip

我是OCI的新手,但只是尝试在PHP中执行一个基本的oci_bind_by_name使其正常工作。但是即使使用简单的select语句和虚拟变量,它仍会拒绝变量类型。

代码如下:

$conn = oci_connect($username, $password, $database);
$dummy = "dummy@dummy.com";
$u = oci_parse($conn, "select ca_email from pwv_google_group");
oci_bind_by_name($u, ':ca_email', $dummy);

但是它只是返回:

Warning: oci_bind_by_name(): ORA-01036: illegal variable name/number

由于这是一个非常简单的查询/参数,因此我只能假设我的语法错误或在Oracle方面可能有问题(ca_email确实应该是varchar,但是我使用的是Datagrip,它不允许使用DESC命令,所以我不知道该如何验证)。还有其他问题吗?

1 个答案:

答案 0 :(得分:0)

oci_bind_by_name()期望您将某种形式的输入值绑定到SQL语句-来自manual

  

bv_name ,在   声明。 bv_name 中的冒号是可选的。 Oracle不使用   占位符的问号。

因此,在您的示例中,它更像是

$u = oci_parse($conn, "select * from pwv_google_group where ca_email = :ca_email");
oci_bind_by_name($u, ':ca_email', $dummy);

当您尝试从数据中检索值时,您只需要按如下所示获取数据(从手册中的示例3中删除)

$u = oci_parse($conn, 'select ca_email from pwv_google_group');
oci_execute($u);
$row = oci_fetch_array($u, OCI_ASSOC+OCI_RETURN_NULLS);
foreach ($row as $item) {
    print $item."<br>\n";
}