У меня есть сайт на базе Codigniter-3.0.4. Запросы к базе данных ODB C работали отлично в течение многих лет. Или так я думал. Вчера я обнаружил, что он просто удаляет все части строки привязки запроса, которая находится между %00
и %1F
(управляющие символы ASCII). Например, x%11y%z
становится xy%z
.
$sql = "SELECT TOP 100 "
. "D1001 as 'part_number', "
. "D1021 as 'description', "
. "D1063 as 'hs_code' "
. "FROM PULAGER "
. "WHERE "
. "D1001 LIKE ? OR "
. "D1021 LIKE ? "
. "ORDER BY D1001";
$contains = 'x%11y%z';
$sql_result = $this->db->query($sql, array($contains, $contains));
return $this->db->last_query();
Возвращает:
SELECT TOP 100 D1001 as 'part_number', D1021 as 'description', D1063 as 'hs_code' FROM PULAGER WHERE D1001 LIKE 'xy%z' OR D1021 LIKE 'xy%z' ORDER BY D1001
Если я вручную заменю метки вопросов на строку поиска, это будет работать нормально , Но я не уверен в проблемах безопасности или других последствиях, когда не используется привязка запроса.
Есть предложения, как мне решить эту проблему?