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

PHP/Oracle - OCI doesn't like my data type?

我是 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);

但它只是 returns:

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

因为这是一个非常简单的 query/parameter,我只能假设我的语法有误或者 Oracle 方面可能有问题(ca_email 确实应该是一个 varchar,但我使用不允许 DESC 命令的 Datagrip,所以我不知道如何验证它)。还有什么问题吗?

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

bv_name The colon-prefixed bind variable placeholder used in the statement. The colon is optional in bv_name. Oracle does not use question marks for placeholders.

所以对于你的例子,它更像是

$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";
}