2012-01-16 3 views
5

私は例えば、定数として定義され、私のデータベースの構成設定でPHPファイルを持っている:私は私のdatabase..Howeverに接続したい時はいつでも私が挿入するために行くとき、私は明らかに、上記のファイルを含めるSQLクエリに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"; 
+0

PHPが定数と読み込み専用変数の違いを知っていただけの場合... –

答えて

15

(任意の種類の)文字列連結を使用する必要があります。

$query = "SELECT users FROM " . DB_TABLE_1; 

定数は、変数がそうすることができるように文字列に補間しません。

一つハック代替変数の機能を使用することです:

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

constant()関数を実行し、一定の値を返しますが、唯一の読みやすさのために場合には、一般的にはお勧めできませんwhich'll。私はこれが簡単だと思う

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

クエリで定数を使用することについて、私はあなたの答えを見つけました。この)。私はこれがむしろ非常に良いアイデアだと思う。時には少しハッキリしている*場合は、さらに2つ以上行く場合注射を防ぐのに役立ちます。これは私がしばらく前に取り組んでいたことに似ており、ある有望な結果がありました。 –

3

ただ、引用符の外にそれを入れて、それが正常に動作する必要がありますこれはより良いです:

define("DB_HOST","localhost"); 
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"; 

また、

0

私は2つの方法を見つけました。

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のを使用していますので、私は使用してバッククォート( ``)。

関連する問題