ПредишенСледващото

Опитвам се да научите най-добрият начин да се напише запитвания. Разбирам също, че е важно да бъдеш последователен. До този момент, аз случайно се използват единични кавички, двойни кавички и обратно връзки без никаква реална мисъл.

Също така, се разгледа по-горе пример, че "маса", "колона [п]," и "Вал [п]" може да бъде променлива.

Какво е стандарт за това? Какво правите?

Четох отговорите на тези въпроси тук около 20 минути, но изглежда, че няма еднозначен отговор на този въпрос.

Backticks да бъдат използвани за таблиците с идентификатор и колоните, но са необходими само когато идентификаторът е запазена дума MySQL или когато идентификаторът включва пространство букви и символи, извън ограничен диапазон (см. По-долу). Често се препоръчва да се избягва употребата на запазени ключови думи като идентификатори колони или таблици, ако е възможно, за да се избегнат проблеми с кавички.

Използвайте единични кавички за низови стойности, например, в стойности () списък. Двойни кавички се поддържат MySQL като низови стойности, но единични кавички са по-широко приети от други RDBMS, така хубаво да се използват единични кавички вместо двойно.

Поради това, с помощта на пример, аз два пъти водеше низ и да използвате единични кавички за ценностите на "val1", "VAL2". NULL - е ключовата дума MySQL и специален (не) стойността, така че не се сортират.

Функции, свързани RDBMS (например NOW () в MySQL), не трябва да бъдат цитирани, въпреки че техните аргументи следват едни и същи правила и правилата за цитиране, които вече бяха споменати.

променлива интерполация

Цитиране шаблони за променливи не се променят, все пак, ако имате намерение да се интерполира променливи директно в реда, тя трябва да бъде посочена два пъти в PHP. Просто се уверете, че сте направили правилно избягал да използвате променливи в SQL. (Вместо това се препоръчва използването на API, който поддържа подготвени отчети, като защита срещу SQL-инжекция).

подготвени отчети

Символи завръщат обратно връзки идентификатори:

Според MySQL на документация. не е нужно да се уточни идентификатори (обратен апостроф), като се използва следния набор от символи:

ASCII: [0-9, AZ, AZ $ _] (основните букви, цифри 0-9, долар, подчертаване)

Можете да използвате символи като идентификатори над масите или колоните, като пространства, но тогава ще трябва да се уточни (обратна) тях.

В MySQL, има два вида котировки:

  1. "За да активирате низовете
  2. `Да включва идентификатори като имена на таблици и колона

И тогава там е "специален случай. Тя може да се използва за една от посочените по-горе цели в даден момент в зависимост от sql_mode sql_mode сървър.

  1. Default "характер" може да бъде използван за закрепване на литерали низ "
  2. В режим ANSI_QUOTES "символ може да се използва за въвеждане на идентификаторите по същия начин"

Следната заявка ще доведе до различни резултати (или грешки), в зависимост от режима на SQL:

ANSI_QUOTES с увреждания

Запитване избира символни низове "колона", където колоната е Foo бар "бар"

включени ANSI_QUOTES

Искането ще избере най-колоната, където колона колона Foo е Колона

кога да се използва

  • Аз Ви предлагам да се избегне използването на "че кодът не е зависим от SQL режими
  • Винаги посочите идентификационните номера, защото това е добра практика (много въпроси на SO го обсъдим)

(Има добри отговори по-горе, във връзка с характера на SQL на въпроса ви, но то също може да бъде от значение, ако не сте запознати с PHP.)

Може би, това е важно да се отбележи, че PHP дръжки единични и двойни кавички по различен начин.

Линии с един кавички - на "буквален" и представлява WYSIWYG ред. Линии PHP двойни кавички тълкуват за евентуално разместване на променливите (PHP назад референтни линии не са точно, те изпълняват команда в черупката и да се върне в резултат).

Backticks обикновено се използват за справка с идентификатор и могат да бъдат защитени от случайно използване на запазени ключови думи.

Тук обратни тикове помогнат да се разбере на сървъра, който съдържа името на базата от данни, не идентификатора на база данни.

Същото може да се направи за имена на таблици и полета на имена. Това е един много добър навик, ако се свърже вашия идентификатор база данни с помощта на препратки.

Вижте този отговор, за да разберете повече за обратното заключение.

Но за да се определи стойността, ще трябва да използвате единични или двойни кавички. Нека разгледаме един пример.

Тук умишлено забравих да приключи раздел 1 кавички. Сега сървърът ще TITLE1 като името на колоната (т.е. идентификатор). Така че, за да покаже своята стойност, ще трябва да използвате двойни или единични кавички.

Сега, като се използват двойни кавички в PHP, ще направи променливите $ val1 и $ VAL2, да използват техните стойности, като по този начин се създава валидна заявка. като

Низовете в MySQL и PHP са едни и същи.

Низ е последователност от байтове или символи, знаци затворени в единични кавички ( '') или двойни кавички ( "" ").

Ето защо, ако си низ съдържа единични кавички, можете да използвате двойни кавички да цитирам низ, или ако съдържа двойни кавички, тогава можете да използвате единични кавички за струнен цитиране. Но ако си низ съдържа както единични кавички и двойни кавички, което трябва да се избегне този, използван за струнен цитиране.

По принцип, ние използваме единични кавички за стойността на SQL низ, така че ние трябва да използвате двойни кавички за PHP низ.

И вие можете да използвате променлива в низ с двойни кавички PHP:

Но ако $ val1 или VAL2 $ съдържа единични кавички, той ще направи вашата SQL погрешно. Така че ще трябва да се измъкне от него, преди той ще се използва в SQL; Това е нещо, което mysql_real_escape_string. (Въпреки, че по-добре подготвени изявление.)

Главно в MySQL, тези видове идентификатори, използвани в заявки ". ". "И ().

`Използване на таблицата на масата или масата, например, изберете COLUMN_NAME от table_name където J = '2'

() Се използва само за да просто да се регистрирате на заявката, например, изберете COLUMN_NAME от таблица_име където (ID = "2" и пол = 'мъжки') или име = 'Ракеш ".

В комбинация с PHP и MySQL двойни кавички и апострофи е много по-лесно време на заявките за писане.

Сега, предполагам, че използвате директна променлива пост в MySQL-заявката, след което да я използват, както следва:

Това е най-добрата практика за използване на PHP променливи в MySQL.

Ако маси и COLS стойности са променливи, има два начина:

С двойни кавички "" пълна жалба:

На един цитат ''.

Използвайте обратно кърлежи `` когато колона име / стойност, подобно на MySQL резервната ключовата дума.

Забележка. Ако зададете име на колона с името на таблицата, използвайте обратната тикове, както следва:

`Table_name`. `column_name` <- Примечание: исключить. Со спины

Използвайте единични кавички за низови стойности, например, в стойности () списък.

Backticks често използвани за означаване на ID, и могат да бъдат безопасни поради случайно използване на запазени ключови думи.

В комбинация с PHP и MySQL двойни кавички и апострофи значително опростяване на писането на искането.

Имаше много полезни отговори, като цяло, което завършва с две точки.

  1. BACKTICKS ( `) се използват около името на идентификатор.
  2. Кавички ( ') се използват около ценности.

И каза @MichaelBerkowski

Backticks да бъдат използвани за таблиците с идентификатор и колоните, но са необходими само когато идентификаторът е запазена дума MySQL или когато идентификаторът включва пространство букви и символи, извън ограничен диапазон (см. По-долу). Често се препоръчва да се избягва употребата на запазени ключови думи като идентификатори колони или таблици, ако е възможно, за да се избегнат проблеми с кавички.

Има случай, в който идентификаторът не може да бъде запазена дума, или да съдържа интервали или символи, които са извън ограничен набор, но изисква непременно препратки около тях.

123E10 - е валидно име на идентификатор, но и действителното буквално число.

[Без да навлизаме в подробности, тъй като можете да получите идентификатор име] Да предположим, че искам да се създаде временна таблица на име 123456e6.

Няма грешки по backticks.

ГРЕШКА, ако не се използват обратни повиквания.

Въпреки 123451a6 - това е голямо име идентификатор (без сигнал за обратна връзка).

Това напълно, защото 1234156e6 също на експоненциално число.

Подкрепете проекта - споделете линка, благодаря!