2012-01-16 55 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,你可能并不需要它们。