ВЫБИРАЙТЕ данные как один массив, а не как результат цикла вместе и предотвращение внедрения - PullRequest
0 голосов
/ 31 марта 2019

Итак, у меня есть два вопроса.

Вопрос 1:

Мой оператор выбора возвращает 2 элемента.Тем не менее, я должен выполнить цикл по элементам, которые он возвращает, чтобы добавить результаты в один массив с именем $results. Есть ли функция, которая уже возвращает данные в виде одного единственного массива (такой же / похожий на то, как вывод сейчас, но без цикла while).

оператор выбора-code.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:

Я перечитывал ответы на вопросы stackoverflow и их несколькоразные ответы, которые противоречат друг другу.Для mysqli есть четкий ответ, но для оракула, кажется, люди спорят об этом. Является ли способ, которым я делаю это ниже, правильный способ устранения SQL-инъекций?Также я использовал функцию oci_bind_by_name 2 раза, чтобы связать my_id и f_name.Есть ли способ вызвать функцию связывания один раз и связать обе переменные?

insert-Statement.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);

1 Ответ

1 голос
/ 31 марта 2019

Q1. используйте oci_fetch_all:

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

Q2.

а. Да, это правильный способ предотвращения инъекций. См. Q & A для получения более подробной информации.
б. Нет, вы должны вызывать oci_bind_by_name один раз для каждой переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...