2013-06-05 71 views
1

我有一個MySQL數據庫,並在表「Klant」我有列名:str_replace函數與查詢結果

ID 
Naam 
Email 
Soort 
Status 

我得到這個查詢的列名:

$strSQL = "select column_name from information_schema.columns where table_name='Klant'"; 

我我用這個簡單的查詢選擇從表中的數據:

$strSQL1 = "SELECT * FROM NAW.Klant"; 

我想要做的是搜索文本,並與str_replace函數我想t替換他的column_names與來自數據庫的數據。例如:

如果我輸入Hello Naam, your email adress is Email,我希望它顯示Hello Robert your email adress is [email protected]。我會把它放在一個循環中,以便每行都做到這一點。我目前正在使用此:

$ID   = $row['Klant_ID']; 
$Naam  = $row['Naam']; 
$Email  = $row['Email']; 
$Soort  = $row['Soort']; 
$Naam  = $row['Status']; 
$vaaw  = array("[ID]","[Naam]", "[Email]", "[Soort]", "[Status]"); 
$vervang = array("$ID","$Naam", "$Email", "$Soort", "$Status"); 

echo str_replace($vaaw, $vervang, $message); 

的原因,我不想用這個了,是因爲如果我需要更改/添加/刪除列的代碼將仍然有效。 (我知道改變列是一個糟糕的主意,但你永遠不知道。)而且這個代碼也可以和其他Tables/DB一起工作。

我已經嘗試過大量的東西來得到這個工作,但我只是沒有線索如何做到這一點,它已經困擾我近2天了。如果有人知道一個功能或一種方法來做到這一點,這將是非常有益的!

+0

你可能想嘗試像[這](http://stackoverflow.com/a/15773754)。此外,如果這是來自學校的作業,您可能會至少將您的代碼/專欄翻譯成英文,以免被抓到:p – HamZa

+0

問題是什麼?如果你有$電子郵件分配,它會改變時,有人把'[電子郵件]'標籤也沒有必要把變量放在「」你可以只使用$ var – Robert

+0

@HamZa Thnx的鏈接,虐待看看它!不,這不是一個學校任務^^對羅伯特:我知道現在這個工作,但我想讓它像我解釋的那樣工作,所以如果我更改數據庫中的列名而不必編輯我的內容,它將繼續工作碼。 – Daanvn

回答

1

試試這個:

<?php 
$strSQL = "select column_name from information_schema.columns where table_name='Klant'"; 

$con=mysqli_connect('host', 'username', 'password', 'db'); 

if(!$con){ 
    //error  
} 

$result=mysqli_query($con,$strSQL); 

if(!$result){ 
    //error 
} 

$table_columns=array(); 
//$row=mysqli_fetch_assoc($result); 
while($row=mysqli_fetch_assoc($result)) 
{ 
    $table_columns[]=$row['column_name']; 
} 

$query="select * from NAW.Klant "; //limit 10"; 

$result=mysqli_query($con,$query); 

if(!$result){ 
    //error 
} 

$greeting_text=""; 

while($row=mysqli_fetch_assoc($result)){ 
    $greeting_text.= (isset($row['naam']))? "Hello {$row['naam']}":""; // because you want the 'hello' 
    for($i=1;$i< count($table_columns);$i++){ 
     $greeting_text.=" Your ".$table_columns[$i]." is ".$row[$table_columns[$i]].", "; 
    } 
    $greeting_text.="\n"; 
} 
echo $greeting_text; //test your result 

如果你有一個預定義的字符串模板(由列名或它們的值來代替),您需要更改代碼,當存在表中的列的任何變化。我只是選擇根據列的可用性動態生成字符串。但是如果你需要使用預定義的字符串,這並不難。

1

我使用HamZa鏈接的腳本解決了它。既然他沒有把它作爲答案發布,我會自己做,因爲我認爲它可以幫助其他人。

是解決該問題的代碼是這樣的:

$connection = mysql_connect('localhost', 'root', 'pw') or die('couldn\'t connect to the database.<br>'. mysql_error()); 
mysql_select_db("NAW"); 
$strSQL1 = "SELECT * FROM Klant"; 
$result = mysql_query($strSQL1, $connection) or die('Something went wrong with the query.<br>'. mysql_error()); 
while($row = mysql_fetch_assoc($result)){ 
    $text = $_POST['naam']; 
    foreach($row as $k => $v){ 
     $text = str_replace('['.$k.']', $v, $text); 
    } 
    echo $text; 
    echo "<br>"; 
}