选择数据作为一个数组,而不是同时循环结果一起和防止注入



所以我有两个问题。

问题1:

我的选择语句返回 2 个项目。但是,我必须循环访问它返回的项目,以将结果附加到名为 $results 的单个数组中。是否有一个函数已经将数据作为单个数组返回(与现在的输出相同/相似,但减去 while 循环(。

选择语句代码.php

$stid = oci_parse($conn, "SELECT *
                          FROM test_table");
oci_execute($stid);
while($row=oci_fetch_array($stid)) {
    $results[] = $row;
}
print_r($results);

输出为:

Array
(
    [0] => Array
        (
            [0] => 1
            [MY_ID] => 1
            [1] => John
            [F_NAME] => John
        )
    [1] => Array
        (
            [0] => 2
            [MY_ID] => 2
            [1] => Mike
            [F_NAME] => Mike
        )
)

问题2:

我一直在阅读堆栈溢出答案,并且有多个不同的答案相互冲突。mysqli有一个明确的答案,但对于oracle来说,似乎人们对此争论不休。我在下面的做法是消除SQL注入的正确方法吗?我也使用了 2 次 oci_bind_by_name 函数,以绑定my_idf_name。有没有办法调用绑定函数一次并绑定两个变量?

插入语句.php

$my_id = 3; // Pretend this is an input from a random user, using my website
$name = "Bobby"; // Pretend this is an input from a random user, using my website
$sql = "INSERT INTO test_table (my_id, f_name) 
        VALUES (:id, :f_name)";
$stid = oci_parse($conn, $sql);
oci_bind_by_name($stid, ":id", $my_id);
oci_bind_by_name($stid, ":f_name", $name);
oci_execute($stid);

Q1. 使用 oci_fetch_all

$num_rows = oci_fetch_all($stid, $results);

问题 2.

一个。是的,这是防止注射的正确方法。有关更多详细信息,请参阅此问答。
b.不可以,您必须为每个变量调用一次oci_bind_by_name

最新更新