Member 14093672 Ответов: 3

Оптимизация Php PDO


Всем Привет,

Просто интересно, правильно ли я это делаю или приведенный ниже код PHP pdo можно оптимизировать?

Забыл сказать, что я использовать stripslashes и привязать парам сейчас.. это теперь в безопасности от SQL-инъекций? пожалуйста, не стесняйтесь комментировать для любой лучшей оптимизации.

Что я уже пробовал:

// Secure and sanitize post variables.
$start = trim(stripslashes($_POST['start']));
$end = trim(stripslashes($_POST['list_records']));
$total_RowCount = trim(stripslashes($_POST['total_records']));


<pre><$stmt = $db->prepare("SELECT a,b,c FROM employees ORDER BY emp_no DESC LIMIT ?,?");
$stmt->bindParam(1, $start,PDO::PARAM_INT);
$stmt->bindParam(2, $end,PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetchAll();

3 Ответов

Рейтинг:
9

Member 14093672

Спасибо MadMyche, теперь осталось только передать запрос с PDO param substitution? Кто-нибудь вокруг, чтобы посоветовать, как использовать привязку PARAM в приведенном выше запросе, пожалуйста.

Вот то, что я получил, и определенно это было бы полезно для других.
пожалуйста, проголосуйте, если привязка ниже полезна для вас.

$stmt = $db->prepare("SELECT a,b,c FROM employees ORDER BY emp_no DESC LIMIT ?,?");
$stmt->bindParam(1, $start,PDO::PARAM_INT);
$stmt->bindParam(2, $end,PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetchAll();


Если у кого-то есть лучшее предложение, пожалуйста, прокомментируйте его.


Рейтинг:
2

Patrice T

/ Prepare Limit Clause from start to end$sqlAll=("SELECT * FROM user_details ORDER BY user_id DESC LIMIT $start, $end ");
...
// Select results
$data = $db_con->query("SELECT * FROM user_details ORDER BY user_id DESC LIMIT $start, $end ")->fetchAll();

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
2

MadMyche

Возможно.

Если только вам это абсолютно не нужно SELECT *, лучше называть только нужные столбцы.
Пример: SELECT TableID, Column1, Column2 FROM ...
Помимо устранения дополнительной нагрузки, связанной с объединением данных вместе, вы уменьшите использование сети и будете использовать меньше памяти в вызывающем приложении.

Еще одна сторона приложения элемента, которая может предложить повышение производительности, - это получение значений столбцов по индексу, а не по имени. В других языках и соединителях данных использование "имени" столбца требует, чтобы приложение знало, какой столбец находится там. В конце концов, это возвращается в виде индексированного массива. Скорее всего, вы не заметите значительного увеличения, делая это.

Дизайн базы данных может быть большим стимулом. У вас установлен первичный ключ и индексы?