php 应用程序引发 ORA-00903 尽管存在 table
php application raises ORA-00903 although the table is present
我正在尝试编写一个 PHP Web 应用程序,对于这个应用程序,我确实需要一个函数来获取 table 的 ID,因为我不想使用无休止的长 switch
我想我会做以下功能:
function getId($conn, string $col, string $tbl, string $val): int{
$qry = oci_parse($conn, "SELECT :col FROM :tbl WHERE :col = :val");
oci_bind_by_name($qry, ':tbl', $tbl);
oci_bind_by_name($qry, ':col', $col);
oci_bind_by_name($qry, ':val', $val);
@$success = oci_execute($qry);
if($success){
//fetch data
}else {
$err = oci_error($qry);
print_r($err);
}
}
}
我最初以为是因为它不会绑定我的变量,但我测试了它 returns true
所以绑定似乎有效。如果我尝试使用该功能,我会收到以下错误消息:
Array
(
[code] => 903
[message] => ORA-00903: Invalid table name
[offset] => 20
[sqltext] => SELECT :col FROM HR.:tbl WHERE :col = :val;
)
我已经通读了一些帖子,但仍然找不到我的错误。我希望你能帮助我。
据我所知,不可能在准备好的语句中绑定 table 和列名。这并不是对准备好的语句的真正限制,因为通常列和 table 结构在不同的 table 中会有所不同,因此无论如何都不能重用相同的语句。
所以我希望以下方法有效:
$qry = oci_parse($conn, "SELECT some_col FROM your_table WHERE some_col = :val");
oci_bind_by_name($qry, ':val', $val);
@$success = oci_execute($qry);
在内部我也不确定这里到底发生了什么,但一种可能性是 PHP 正在转义你的 table 名称作为参数。无论如何,它不会导致 运行.
的查询
如果您需要更改准备好的语句中的列或 table,请继续创建另一个语句。
我正在尝试编写一个 PHP Web 应用程序,对于这个应用程序,我确实需要一个函数来获取 table 的 ID,因为我不想使用无休止的长 switch
我想我会做以下功能:
function getId($conn, string $col, string $tbl, string $val): int{
$qry = oci_parse($conn, "SELECT :col FROM :tbl WHERE :col = :val");
oci_bind_by_name($qry, ':tbl', $tbl);
oci_bind_by_name($qry, ':col', $col);
oci_bind_by_name($qry, ':val', $val);
@$success = oci_execute($qry);
if($success){
//fetch data
}else {
$err = oci_error($qry);
print_r($err);
}
}
}
我最初以为是因为它不会绑定我的变量,但我测试了它 returns true
所以绑定似乎有效。如果我尝试使用该功能,我会收到以下错误消息:
Array
(
[code] => 903
[message] => ORA-00903: Invalid table name
[offset] => 20
[sqltext] => SELECT :col FROM HR.:tbl WHERE :col = :val;
)
我已经通读了一些帖子,但仍然找不到我的错误。我希望你能帮助我。
据我所知,不可能在准备好的语句中绑定 table 和列名。这并不是对准备好的语句的真正限制,因为通常列和 table 结构在不同的 table 中会有所不同,因此无论如何都不能重用相同的语句。
所以我希望以下方法有效:
$qry = oci_parse($conn, "SELECT some_col FROM your_table WHERE some_col = :val");
oci_bind_by_name($qry, ':val', $val);
@$success = oci_execute($qry);
在内部我也不确定这里到底发生了什么,但一种可能性是 PHP 正在转义你的 table 名称作为参数。无论如何,它不会导致 运行.
的查询如果您需要更改准备好的语句中的列或 table,请继续创建另一个语句。