в этой функции и другой функции, такой как эта, для обновления, удаления и вставки, как я могу обрабатывать SQL инъекции в этом коде с pdo-> предпочитать?
function get_rows($fields = '*', $where = ' 1=1 ') {
$this->_query = "select $fields from {$this->table} where {$where}";
$stm = $this->_pdo->query($this->_query);
if(!$stm)
die(var_export($this->_pdo->errorinfo(), TRUE));
else
return $stm->fetchAll();}function insert($fields, $data) {
$this->_query = " insert into $this->table ($fields) VALUES ($data)";
$this->_pdo->exec($this->_query);
}
Взято из документации API подготовленной выписки из PDO:
Сначала создайте готовое утверждение с заполнителями. Затем свяжите заполнители с вашими переменными и вызовите метод execute, который предлагает PDO.
Так что ваша функция может выглядеть так:
function insert($fields, $data) {
$stmt = $dbh->prepare("INSERT INTO ".$this->table ."(fields, values) VALUES (:fields, :values)");
$stmt->bindParam(':fields', $fields);
$stmt->bindParam(':fields', $values);
$stmt->execute();
}
Обратите внимание, что от того, как именно вы предоставите параметр имен и значений, зависит, будете ли вы вносить некоторые дополнительные изменения, но я ожидаю, что вы поймете суть примера. Используйте bindParam, чтобы связать параметры в подготовленном операторе, а затем выполнить его.
prepare()
не сильно поможет, так как вы решили создать свои собственные функции оболочки PDO.
Связывание столбцов и таблицы не поддерживается в PDO
,
На данный момент вы на свой страх и риск, избегая символов, SQL инъекций …
Это, вероятно, понятно для таблиц и столбцов, вы можете использовать массив жестко закодированных строк и затем выдать ошибку, если не найдены:
if (!in_array($field, $list_of_fields)) {
throw new MyPDOException('Field not found');
}
Что касается ценности снова, вы должны сделать некоторую работу, чтобы очистить их, так что вы видите много работы, которую вам не нужно было делать?
Может быть, это простое приложение CRUD, но что если вам нужно выполнить запрос JOIN? Вы собираетесь создать функцию для этого?
Это будет грязно, я предлагаю вам написать чистый код PDO, так как вы собираетесь переписать свою собственную библиотеку, когда вы ограничены.