PHPアプリケーションをプログラミングしようとしています。このアプリケーションでは、テーブルのIDを取得する必要がありますし、無限に長い時間switch
私は次の関数を作るだろうと思った:テーブルが存在していますが、PHPアプリケーションはORA-00903を発生します。
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);
}
}
}
私が最初にそれが私の変数をバインドするwouldntはので、それはだと思ったが、私はそれをテストし、それが動作しているようですので、結合true
を返します。私は機能を使用しようとすると、私は次のエラーメッセージが出ます:
Array
(
[code] => 903
[message] => ORA-00903: Invalid table name
[offset] => 20
[sqltext] => SELECT :col FROM HR.:tbl WHERE :col = :val;
)
を私はすでにいくつかの記事を読んで、私はまだ私のエラーを見つける傾けます。あなたが私を助けることを願っています。
これは他の答えに記載されているようには機能しません。バインド変数はSQLテキストではなくデータのためのものです。文字列連結を使用してPHP内でSQLテキストを動的に構築する場合は、SQLインジェクション攻撃につながるので、ユーザーから渡された値を連結しないでください。そのようなテキストがスクリプトでハードコードされていることを確認してください。 –