Я использую codeigniter и большую часть времени использую активную запись для своих запросов (что автоматически ускользает от них), но этот запрос, похоже, не аккуратно вписывается в него из-за переменной. Поэтому мне нужно выяснить, как избежать запроса вручную.
Документы Codeigniter предлагают избегать запросов таким образом:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
Мой исходный запрос
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}'";
Мой сбежавший запрос
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}' VALUES(".$this->db->escape($user_language).")";
Но мне трудно получить синтаксис. Сообщения об ошибках:
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id);
если вы хотите выбрать язык пользователя, заданный с помощью $ id, он должен работать таким образом.
имея дело с числами, альтернативой будет:
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id;
codeigniter также поддерживает подготовленные операторы как «привязки запросов»:
Второе преимущество использования привязок заключается в том, что значения автоматически экранируются, создавая более безопасные запросы. Вам не нужно забывать вручную удалять данные; двигатель делает это автоматически для вас.
Я смущен, почему вы говорите, что не можете использовать класс Active Record с CI, это простой вызов SQL (пример ниже использует цепочку методов ):
$this->db->select('*')->from('user_language')->where('user_id', $id); $query = $this->db->get();
Ваш $id
затем сбрасывается должным образом, и вы уменьшаете любую инъекцию. Лично я использую AR, когда это возможно, он позволяет мне писать быстрый эффективный код и не беспокоиться о плохих вещах с помощью SQL-запросов (пользовательских запросов).