1

我有一个 MySql 数据库,在“Klant”表中我有列名:

ID
Naam
Email
Soort
Status

我用这个查询得到列名:

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

我正在使用这个简单的查询从表中选择数据:

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

我想要做的是搜索文本并使用 str_replace 我想用数据库中的数据替换 column_names。例如:

如果我输入,Hello Naam, your email adress is Email我希望它显示Hello Robert your email adress is robert@gmail.com. 我将把它放在一个循环中,为每一行做这件事。我目前正在使用这个:

$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); 

我不想再使用它的原因是,如果我需要更改/添加/删除一列,代码仍然可以工作。(我知道更改列是一个坏主意,但您永远不知道。)而且此代码将与其他表/数据库一起使用。

我已经尝试了很多事情来让它工作,但我只是不知道如何做到这一点,而且它已经困扰了我近 2 天了。如果有人知道这样做的功能或方法,那将非常有帮助!

4

2 回答 2

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

如果您有预定义的字符串模板(将被列名或其值替换),则需要在表列发生任何更改时更改该代码。我只是选择根据列的可用性动态生成字符串。但是如果您需要使用预定义的字符串,这样做并不难。

于 2013-06-05T08:34:24.920 回答
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>";
}
于 2013-06-05T11:07:15.020 回答