2011-09-01 41 views
1

我看到一個類似的問題,但沒有答案。printf或類似的SQL查詢中?

我有以下SQL查詢:

$sql = mysql_query("SELECT * FROM patient_db_0004 WHERE MATCH (Name, id_number) AGAINST ('$term' IN BOOLEAN MODE);"); 

其中patient_db_0004是我想打印我的SQL查詢中的自動增量指標,如「0001,0002,0003,0004」。

printf("%04s",$i); 

打印查詢中的值。

回答

2

在MySQL上,您可以使用string functions。對於你的榜樣,你可能想嘗試LPAD

SELECT LPAD(`id`, 4, '0') FROM patient_db_0004 

你可以搜索你的數據庫引擎類似的功能。

輸出示例:

mysql> SELECT LPAD(`id` , 4, '0') FROM `patient_db_0004` LIMIT 10; 
+---------------------+ 
| LPAD(`id` , 4, '0') | 
+---------------------+ 
| 0001    | 
| 0002    | 
| 0003    | 
| 0004    | 
| 0005    | 
| 0006    | 
| 0007    | 
| 0008    | 
| 0009    | 
| 0010    | 
+---------------------+ 
10 rows in set (0.00 sec) 

(我有一個AUTO_INCREMENT場在上面的例子稱爲id

編輯:根據您的意見,似乎Vincent's answer是你在找什麼爲:

<?php 
$term = 'foobar'; 
for($i=1; $i<5; $i++) 
{ 
    echo(sprintf("SELECT * FROM patient_db_%04d WHERE MATCH (Name, id_number) AGAINST ('$term' IN BOOLEAN MODE);\n", $i)); 
} 
?> 

遞給我:

SELECT * FROM patient_db_0001 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE); 
SELECT * FROM patient_db_0002 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE); 
SELECT * FROM patient_db_0003 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE); 
SELECT * FROM patient_db_0004 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE); 

如果我理解正確,您正在嘗試運行這些查詢。所以你可能會考慮在這裏做的是:

<?php 
// ... 
for($i=1; $i<5; $i++) 
{ 
    $query = sprintf("SELECT * FROM patient_db_%04d WHERE MATCH (Name, id_number) AGAINST ('$term' IN BOOLEAN MODE);\n", $i); 
    $sql = mysql_query(); 
} 
?> 
+0

所以我可以自動選擇'patient_db_0004',patient_db_0005,patient_db_0006 - 自動? – iamwhitebox

+0

也許我誤解了你的問題。我編輯了我的答案。希望有所幫助。 – Umang

1

你想用sprintf代替了printf(其值打印字符串):

$query = sprintf("SELECT foo FROM bar WHERE baz = '%s'", "hi"); 
$sql = mysql_query($query); 

但是,請記住,這並不妨礙你從SQL注入。您仍然必須在用戶提供的數據上使用mysql_real_escape_string。