Mysql
 sql >> база данни >  >> RDS >> Mysql

Правилно ли дезинфекцирам/избягам?

По някаква причина се нуждаем също така от екраниране на обратна наклонена черта също.
И така, според мен правилният код би бил

if(isset($_GET['q'])){
  $_GET['q'] = trim($_GET['q']);
  if(strlen($_GET['q']) >= 2){
    $q = $_GET['q'];
    $q = '%'.addCslashes($q, '\%_').'%';
    // now we have the value ready either for escaping or binding
    $q = mysql_real_escape_string($q);
    $sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'";
    //or 
    $sql = "SELECT name, age, address FROM book WHERE name LIKE ?";
    $stm = $pdo->prepare($sql);
    $stm->execute(array($q));
    $data = $stm->fetchAll();
  }
}

За изхода използвайте

echo htmlspecialchars($_GET['q']);

тук не са необходими наклонени черти.

магическите кавички няма да навредят на сигурността ви, ако не ги използвате.
Наборът от символи е опасен в случай на някои изключително редки кодировки, но само ако е неправилно зададен. ако mysql(i)_set_charset или DSN (в случай на PDO) са използвани за целта - отново сте в безопасност.

Що се отнася до PDO, уики за етикети би трябвало да е достатъчно за начало, вярвам




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете цялата Дата на месеца заедно с данните от таблицата

  2. Laravel:Как да изтрия редове от множество таблица със същия идентификатор само с 1 заявка?

  3. Как да създавате и изтривате бази данни и таблици в MySQL

  4. MySQL Обяснете ограничението на редовете

  5. Може ли Hibernate да работи със синтаксиса на MySQL ON DUPLICATE KEY UPDATE?