У меня есть PHP-файл с настройками конфигурации моей базы данных, определенными как константы, например:
<?php define(DB_HOST,"localhost"); define(DB_USERNAME,"root"); define(DB_PASSWORD,"password"); define(DB_NAME,"db_users"); define(DB_TABLE_1,"table_1"); define(DB_TABLE_2,"table_2); ?>
Я, очевидно, включаю этот файл, когда хочу подключиться к моей базе данных. Однако, когда я перехожу к вставке констант определения таблицы в SQL-запрос (см. Ниже), он, похоже, не работает. Должен ли я должным образом избежать постоянной или конкатенировать ее каким-то образом?
$query = "SELECT users FROM DB_TABLE_1";
Вам нужно будет использовать конкатенацию строк (любого типа).
$query = "SELECT users FROM " . DB_TABLE_1;
константы не будут интерполировать в строку как переменные.
Одна из хакерских альтернатив – использовать переменную функцию:
$const = 'constant'; $query = "SELECT users FROM {$const('DB_TABLE_1')}";
который выполнит функцию constant()
и вернет значение константы, но это, как правило, не очень хорошая идея, хотя бы ради удобочитаемости.
Просто поставьте его вне цитат, и он должен работать нормально:
$query = "SELECT users FROM ".DB_TABLE_1;
Я думаю, что это проще:
$query = "SELECT users FROM '.DB_TABLE_1.'";
при использовании нескольких таблиц:
$query = "SELECT TB_1.users, TB_2.names FROM '.TB_1.' INNER JOIN '.TB_2.' ON x=y";
Кроме того, это лучше:
define("DB_HOST","localhost");
Я нашел два пути.
1.-
define("VALUE1", "someValue"); $query = "SELECT * FROM TABLE WHERE `Column` /*=" . VALUE1 . "*/";
2.-
define("VALUE1", "someValue"); define("VALUE2", "otherValue"); $query = "INSERT INTO TABLE (`Column1`, `Column2`) VALUES (" . VALUE1 . ", " . VALUE2 . ")";
Backticks (“) я использую, потому что я использую phpmyadmin, вам могут и не понадобятся.