2012-01-16 54 views
5

我有一個定義的常量我的數據庫配置設置的PHP文件,例如:如何將一個PHP常量插入到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); 

?> 

我顯然包括上述文件每當我想連接到我的database..However,當我去插入將表定義常量放入SQL查詢中(見下文),它似乎不起作用。我需要正確地逃避常量還是以某種方式連接它?

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

如果PHP只知道一個常量和一個只讀變量之間的區別...... – 2012-01-16 17:36:18

回答

15

您必須使用字符串連接(任何類型)。

$query = "SELECT users FROM " . DB_TABLE_1; 

常量不會插入字符串作爲變量可以。

一個hackish的替代方法是使用一個變量函數:

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

which'll執行constant()功能,並返回常量的值,但是這通常不是一個好主意,如果僅僅是爲了便於閱讀的緣故。

+0

我偶然發現了有關在查詢中使用常量的答案,如果可能的話(這裏沒有太多關於這個)。我認爲這是Marc的一個非常好的主意。有時會有一些* hackish *可以幫助防止注射,如果進一步或兩步。這與我前段時間的工作很相似,並且有一些很有希望的結果。 – 2015-02-02 18:54:06

3

只要把它的報價之外,它應該很好地工作:

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

我覺得這是比較容易:

$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"); 
0

我找到了兩種方法。

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

的反引號(``)我使用的,因爲我使用phpMyAdmin,你可能並不需要它們。