У меня есть несколько запросов HANA, использующих ввод PLACEHOLDER
, и, конечно, я хочу предотвратить внедрение SQL.
Я пытаюсь использовать ?
в odbc_prepare()
$query = <<<SQL
SELECT
col,
...
FROM table_name('PLACEHOLDER'=('$$some_key$$', ?))
WHERE col = ?
SQL;
$stmt = \odbc_prepare($conn, $query);
if ($stmt !== false) {
\odbc_execute($stmt, ['placeholder_value', 'where_value']);
}
но я получаю это предупреждение:
Warning: odbc_prepare(): SQL error: [SAP AG][LIBODBCHDB SO][HDBODBC] Syntax error or access violation;257 sql syntax error: incorrect syntax near "?": line 32 col 40 (at pos 1283), SQL state 37000 in SQLPrepare
и заявление не было создано. Итак, мой код теперь выглядит так:
$query = <<<SQL
SELECT
col,
...
FROM table_name('PLACEHOLDER'=('$$some_key$$', 'placeholder_value'))
WHERE col = ?
SQL;
$stmt = \odbc_prepare($conn, $query);
if ($stmt !== false) {
\odbc_execute($stmt, ['where_value']);
}
Как я вижу, здесь htmlspecialchars()
недостаточно для предотвращения SQL-инъекций.
Я не могу удалить заполнитель ввода, у меня нет HANA.
Есть ли другой способ предотвратить внедрение SQL в PLACEHOLDER
?