Есть ли встроенная функция для экранирования строки для запроса Oracle?(например, mysql_real_escape_string для MySQL) - PullRequest
0 голосов
/ 18 мая 2018

Я понимаю, что в настоящее время для правильной обработки всех запросов SQL следует использовать PDO (или использовать функцию, предоставляемую в среде PHP, например, eloquent в laravel). Однако, поскольку в MySQL есть mysql_real_escape_string, мне любопытно, еслиесть такая функция для Oracle в PHP?

Я искал в Google, и большинство ответов, кажется, пишут код замены строки самостоятельно.Это работает, по крайней мере, для некоторых распространенных проблем, таких как цитата ('), но мне просто любопытно, есть ли встроенная функция для этого.(и на всякий случай нужно сделать другой выход, чтобы предотвратить внедрение SQL)

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Чтобы ответить на ваш реальный вопрос о внедрении SQL, вы должны (на самом деле «должны») использовать переменные связывания вместо конкатенации строк, как упомянуто Альваро Гонсалес .Это также важно для производительности и масштабируемости.Привязка хранит данные отдельно от SQL и позволяет избежать строгой необходимости очистки данных.Чтобы использовать пример, который у меня есть:

<?php

$conn = oci_connect('hr', 'welcome', 'localhost/orclpdb');

$query = "select first_name, last_name
          from employees
          order by
              case :ob
                   when 'FIRST_NAME' then first_name
                   else last_name
              end";

$vs = "FIRST_NAME";

$s = oci_parse($conn, $query);
oci_bind_by_name($s, ":ob", $vs);
$r = oci_execute($s);

echo "<table border='1'>\n";
while (($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "  <td>".($item !== null ? htmlentities($item, ENT_QUOTES):"&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
0 голосов
/ 18 мая 2018

Есть пакет DBMS_ASSERT.Он предназначен для подготовки и проверки входной строки. DBMS_ASSERT
ENQUOTE_LITERAL функция

Если вы хотите использовать хардкорные строковые литералы, вы можете использовать механизм выхода.
q'( ... )'
q'~ ... ~'
q'! ... !'

DECLARE
       v VARCHAR2(1024);
    BEGIN
       v := q'( The string  with quouts ',','   )';
       DBMS_OUTPUT.PUT_LINE(v);
    END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...