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

Какво означава да избягаш от низ?

Екранирането на низ означава намаляване на двусмислието в кавички (и други знаци), използвани в този низ. Например, когато дефинирате низ, обикновено го заобикаляте в двойни или единични кавички:

"Hello World."

Но какво ще стане, ако моят низ има двойни кавички в него?

'Hello "World."'

Сега имам неяснота - интерпретаторът не знае къде свършва низът ми. Ако искам да запазя двойните си кавички, имам няколко възможности. Бих могъл да използвам единични кавички около моя низ:

'Hello "World."'

Или мога да избягам от моите кавички:

"Hello \"World.\""

Всеки цитат, предшестван от наклонена черта, е екраниран , и се разбира като част от стойността на низа.

Когато става въпрос за заявки, MySQL има определени ключови думи, които следи, които не можем да използваме в нашите заявки, без да предизвикаме известно объркване. Да предположим, че имаме таблица със стойности, където колона е наречена „Избор“ и искаме да изберем това:

SELECT select FROM myTable

Сега въведохме известна неяснота в нашата заявка. В рамките на нашата заявка можем да намалим тази неяснота, като използваме обратни отметки:

SELECT `select` FROM myTable

Това премахва объркването, което внесохме, използвайки лоша преценка при избора на имена на полета.

Много от това могат да се справят вместо вас, като просто прехвърлите стойностите си през mysql_real_escape_string() . В примера по-долу можете да видите, че предаваме данните, изпратени от потребителя през тази функция, за да гарантираме, че няма да причини проблеми за нашата заявка:

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

Съществуват и други методи за избягване на низове, като add_slashes , addcslashes , quotemeta , и още, въпреки че ще откриете, че когато целта е да се изпълни безопасна заявка, като цяло разработчиците предпочитат mysql_real_escape_string или pg_escape_string (в контекста на PostgreSQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel 5.4 на PHP 7.0:PDO изключение - не можа да се намери драйвер (MySQL)

  2. Какво е схема на база данни?

  3. 4 начина за замяна на NULL с различна стойност в MySQL

  4. Инсталиране на конкретни версии на пакета с pip

  5. Каква е разликата между използването на INDEX срещу KEY в MySQL?