2012-01-16 16 views
5

Mam plik PHP z moich ustawień konfiguracyjnych bazy danych zdefiniowane jako stałe, na przykład:Jak wstawić stałą PHP do zapytania SQL?

<?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); 

?> 

I oczywiście zawierać powyższy plik gdy chcę połączyć się z moim database..However, kiedy idę, aby wstawić Stałe definicji tabeli w zapytaniu SQL (patrz poniżej) wydaje się nie działać. Czy muszę w odpowiedni sposób uciec od stałej lub złączyć ją w jakiś sposób?

$query = "SELECT users FROM DB_TABLE_1"; 
+0

Jeśli PHP zna różnicę między stałą a zmienną tylko do odczytu ... –

Odpowiedz

15

Będziesz musiał użyć konkatenacji ciągów znaków (dowolnego rodzaju).

$query = "SELECT users FROM " . DB_TABLE_1; 

Stałe nie będą interpolować na ciąg znaków, jak mogą mieć zmienne.

Jeden hackish Alternatywą jest użycie zmiennej funkcji:

$const = 'constant'; 
$query = "SELECT users FROM {$const('DB_TABLE_1')}"; 

which'll wykonywania funkcji constant() i powrotu wartości stałej, ale nie jest to ogólnie dobry pomysł, choćby przez wzgląd na czytelność tych.

+0

Natknąłem się na twoją odpowiedź w odniesieniu do używania stałych w zapytaniach i jeśli było to możliwe (nie ma zbyt wiele w odniesieniu do to). Myślę, że to raczej bardzo dobry pomysł, Marc. Czasami nieco * hackish * może pomóc zapobiec wstrzyknięciu, jeśli idzie o krok lub dwa dalej. Jest to podobne do czegoś, nad czym pracowałem jakiś czas temu i przyniosło obiecujące rezultaty. –

3

Wystarczy umieścić je poza cytatami i powinno działać prawidłowo:

$query = "SELECT users FROM ".DB_TABLE_1; 
0

myślę, że to jest łatwiejsze:

$query = "SELECT users FROM '.DB_TABLE_1.'"; 

przy użyciu wielu tabel:

$query = "SELECT TB_1.users, TB_2.names FROM '.TB_1.' 
      INNER JOIN '.TB_2.' 
      ON x=y"; 

także to jest lepsze:

define("DB_HOST","localhost"); 
0

Znalazłem dwa sposoby.

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 . ")"; 

W backticks (``) używam bo używam phpmyadmin, może nie są potrzebne.

Powiązane problemy