2012-01-16 32 views
5

Tôi có một file PHP với các thiết lập cấu hình cơ sở dữ liệu của tôi định nghĩa là hằng số, ví dụ:Làm thế nào để bạn chèn một hằng số PHP vào một truy vấn 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); 

?> 

tôi rõ ràng bao gồm các tập tin trên bất cứ khi nào tôi muốn kết nối với database..However của tôi, khi tôi đi để chèn bảng định nghĩa hằng số vào truy vấn SQL (xem bên dưới) nó dường như không hoạt động. Tôi có cần phải thoát đúng cách hoặc nối nó theo một cách nào đó không?

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

Nếu PHP chỉ biết sự khác biệt giữa hằng số và biến chỉ đọc ... –

Trả lời

15

Bạn sẽ phải sử dụng nối chuỗi (thuộc bất kỳ loại nào).

$query = "SELECT users FROM " . DB_TABLE_1; 

hằng số sẽ không nội suy thành chuỗi dưới dạng biến có thể.

Một thay thế hackish là sử dụng một hàm biến:

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

which'll thực hiện constant() chức năng và trở về giá trị của hằng số, nhưng đó là nói chung không phải là một ý tưởng tốt, nếu chỉ vì mức độ dễ đọc của.

+0

Tôi tình cờ tìm câu trả lời của bạn liên quan đến việc sử dụng hằng số trong truy vấn và nếu có thể (không có nhiều liên quan đến điều này). Tôi nghĩ đây là một ý tưởng rất hay Marc. Đôi khi là một chút * hackish * có thể giúp ngăn ngừa tiêm nếu đi một hoặc hai bước xa hơn. Điều này tương tự như một cái gì đó tôi đã làm việc trên một số thời gian trước đây và đã có một số kết quả đầy hứa hẹn. –

3

Chỉ cần đặt nó bên ngoài dấu ngoặc kép và nó sẽ làm việc tốt:

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

Tôi nghĩ rằng đây là dễ dàng hơn:

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

khi sử dụng nhiều bảng:

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

Ngoài ra, điều này tốt hơn:

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

Tôi đã tìm thấy hai cách.

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

Các backticks (``) Tôi sử dụng bởi vì tôi đang sử dụng phpMyAdmin, bạn có thể không cần đến chúng.

Các vấn đề liên quan