$_POST['username']); try { $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch(PDOException"> $_POST['username']); try { $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch(PDOException"> $_POST['username']); try { $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch(PDOException" />

Мне нужно подготовленное заявление о каждом вопросе?

$query = "SELECT 1 FROM users WHERE username = :username";
$query_params = array(':username' => $_POST['username']);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$row = $stmt->fetch();
if($row)
{
die("This username is already in use");
}

Это все работы, но:

  1. , мне действительно нужно подготовленное заявление, если вопрос просто ИЗБРАННЫЙ или ИЗБРАННЫЙ ГРАФ ?
    Поскольку, если нет никакого ВСТАВКА/ОБНОВЛЕНИЕ/УДАЛЯЕТ операции на столе - я предполагаю, что там не опасно из внедрения SQL или спама?

  2. , я действительно должен попытку/выгоду заявление каждый раз, я иду в базу данных?

0
Есть всегда опасность Внедрения SQL, работая с внешними ценностями. Какое заявление это - doesn' t вопрос. Пункт Внедрения SQL делает его различным заявлением
добавлено автор Pekka 웃, источник
Внедрение SQL не, примерно $ _GET , $ _POST и $ _COOKIE Вар. Также рассмотрите Второе Внедрение SQL Заказа.
добавлено автор MrCode, источник
Внедрение SQL не, примерно $ _GET , $ _POST и $ _COOKIE Вар. Также рассмотрите Второе Внедрение SQL Заказа.
добавлено автор MrCode, источник
Вы don' t должен использовать PDO если , там переменные в SQL-операторе, который ваши пользователи могли бы быть в состоянии изменить. Который вы делаете. Помните маленького Бобби Тэбльза.
добавлено автор Blazemonger, источник
Вы don' t должен использовать PDO если , там переменные в SQL-операторе, который ваши пользователи могли бы быть в состоянии изменить. Который вы делаете. Помните маленького Бобби Тэбльза.
добавлено автор Blazemonger, источник
http://xkcd.com/327 / Воображает, удалось ли кому-то сделать ваш $ _POST [' username'] переменная Robert'); пользователи DROP TABLE; - , Если вы didn' t санируют ваши данные тогда you' d быть ручьем I' m не верный I' m позволил упоминать на общественной территории;)
добавлено автор Stu, источник
Используйте подготовленные заявления в любой пункт , что пользователь мог предоставлять данные вопросу для. Это - правило номер один, принимая любые пользовательские данные. Просто, потому что they' ре, не изменяющее данные с обновлением/и т.д. это doesn' t означают их can' t читают частную информацию и используют ее для их преимущества.
добавлено автор Grambot, источник
Используйте подготовленные заявления в любой пункт , что пользователь мог предоставлять данные вопросу для. Это - правило номер один, принимая любые пользовательские данные. Просто, потому что they' ре, не изменяющее данные с обновлением/и т.д. это doesn' t означают их can' t читают частную информацию и используют ее для их преимущества.
добавлено автор Grambot, источник

7 ответы

Если есть какие-либо переменные, что вы вставляете вопрос, который пользователь может изменить в любом случае, вы должны (должен) использовать подготовленные заявления.

2
добавлено

Если есть какие-либо переменные, что вы вставляете вопрос, который пользователь может изменить в любом случае, вы должны (должен) использовать подготовленные заявления.

2
добавлено

Всегда есть опасность Внедрения SQL даже на операторах SELECT, потому что кто-то мог закончить ИЗБРАННОЕ и приложить оператор INSERT в имени пользователя. Однако, если вы используете mysql_real_escape_string (), или иначе ваши классы DB избегают ваших ценностей для вас тогда, вы не должны волноваться о, пробуют/завоевывают популярность оператор SELECT. Если вы избежали своих ценностей, это достаточно для вашего SQL:

$username = mysql_real_escape_string($username);//escape the string first.
$query = "SELECT 1 FROM users WHERE username = '$username'";
2
добавлено
Правильный. Спасибо!
добавлено автор davidethell, источник

Всегда есть опасность Внедрения SQL даже на операторах SELECT, потому что кто-то мог закончить ИЗБРАННОЕ и приложить оператор INSERT в имени пользователя. Однако, если вы используете mysql_real_escape_string (), или иначе ваши классы DB избегают ваших ценностей для вас тогда, вы не должны волноваться о, пробуют/завоевывают популярность оператор SELECT. Если вы избежали своих ценностей, это достаточно для вашего SQL:

$username = mysql_real_escape_string($username);//escape the string first.
$query = "SELECT 1 FROM users WHERE username = '$username'";
2
добавлено
Правильный. Спасибо!
добавлено автор davidethell, источник

1) Нет, вы не должны использовать подготовленные заявления; вы могли использовать, например, PDO:: вопрос и PDO:: укажите, чтобы создать вопрос, используя конкатенацию строк. ОДНАКО - ДА, любое время вы используете внешне-предоставленные-строки, есть риск повреждения от Внедрения SQL, даже если вы просто делаете ИЗБРАННОЕ. Например, нападавший мог попытаться управлять двумя заявлениями в одном при помощи a""; в предоставленной строке. PDO:: цитата - другой способ охранять против этого.

2) Вы могли бросить ошибку из своего кода запроса, но где-нибудь необходимо будет рассмотреть обработку ошибок.

2
добавлено

Насколько связь с базой данных идет, это - единственный подход, в котором вы нуждаетесь. Попытайтесь Выгода: (если вы используете базу данных MySql),

try {
    $conn = new PDO('mysql:host=localhost;dbname=DBNAME', 'USER', 'PASS', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

Плюс, есть встроенный вопрос количества на счет:

$affected_rows = $stmt->rowCount();

Вот хорошая обучающая программа, если вы никогда не знали

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

1
добавлено
Благодаря всем. Достаточно для разъяснения.
добавлено автор Alegro, источник

Насколько связь с базой данных идет, это - единственный подход, в котором вы нуждаетесь. Попытайтесь Выгода: (если вы используете базу данных MySql),

try {
    $conn = new PDO('mysql:host=localhost;dbname=DBNAME', 'USER', 'PASS', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

Плюс, есть встроенный вопрос количества на счет:

$affected_rows = $stmt->rowCount();

Вот хорошая обучающая программа, если вы никогда не знали

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

1
добавлено
Благодаря всем. Достаточно для разъяснения.
добавлено автор Alegro, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp