Если вы используете обратные метки, вы избегаете того, чтобы ваш код перестал работать, если MySQL вводит новое зарезервированное ключевое слово. Представьте себе все веб-сайты, которые вы создали, все перестали работать, потому что в обновлении MySQL появилось новое ключевое слово, которое вы ранее использовали в качестве имени таблицы!
Ваш SQL может быть немного менее переносимым, но на самом деле ... замена обратного кавычка на двойные кавычки - это вопрос одного поиска / замены в файле (если вы не используете оператор выполнения обратного куска PHP в том же файле) , Вы не можете сделать это в обратном порядке: замените двойные кавычки на обратные кавычки, так как могут быть изменены и другие строки (все для оператора PHP «execute», тьфу!)!
Или, если вы хотите, чтобы код был совместим с обоими, вы можете выполнить замену внутри нескольких функций, которые обрабатывают / подготавливают SQL:
function myExecute($sql,$params) {
if(NOT_MYSQL) $sql=str_replace('`','"',$sql);
return execute($sql,$params);
}
Что вы должны НИКОГДА не делать, это использовать двойные кавычки для заключения строковых значений в SQL. Это разрешено MySQL, но очень плохо для переносимости. Возможно, вам придется заменить все ваши строки вручную.
<?php
// Don't. Use ' for strings instead
$sql='SELECT "col1" FROM "tab" WHERE "col2"="very bad"';
// Better
$sql="SELECT `col1` FROM `tab` WHERE `col2`='not that bad'";
// May crash later if tab becomes a keyword (or col1, or col2,..)
$sql="SELECT col1 FROM tab WHERE col2='not that bad'";
// Standard. But harder to replace ""s to ``s later, and annoying \'s in code
$sql='SELECT "col1" FROM "tab" WHERE "col2"=\'not that bad\'';
// Safe. Annoying.
$sql="SELECT my_unique_col1 FROM my_unique_tab WHERE my_unique_col2='not that bad'";
?>
Как вы видите в последнем примере, вы можете называть свои таблицы и поля таким образом, который, вероятно, уникален (добавьте некоторый префикс ко всем, в данном случае «my_unique_»), это скучно, но в основном безопасно и переносимо.