下面的代码是它的一个小版本。
我的 MySQL 表“报告”如下所示:
报告 rep_id rep_description rep_query varchar 3 varchar 50 varchar 50 -------------------------------------------------- -------------------------- | R01 | 姓名搜索 | SELECT name FROM customers WHERE name='$var' | -------------------------------------------------- -------------------------- | R02 | 所有名字 | 从客户中选择姓名 | -------------------------------------------------- --------------------------
一个report_list.php 生成可用报告的列表。如果报告有一个“搜索字段”,它被放置在一个 html 表单中。对于 R01,我们将拥有:
<h3>R01</h3>`
<form action="generator.php" method=post>
<input type="text" name="var" >Search String
<input type="hidden" name="rep" value='R01'>
<input type="submit"></form>
这是“generator.php”。请记住,所有 MySQL 注入和代码保护都已放置。问题的核心只是字符串扩展。
<?php
$var=$_REQUEST['var'];
$rep=$_REQUEST['rep'];
mysql_connect(******,*****,******,false,65536);
@mysql_select_db(*******) or die("Unable to select database");
$query="SELECT rep_query FROM reports WHERE rep_id='$rep'";
$result=mysql_query($query);
$runsql=mysql_result($result,0,'rep_query');
//Now run the query you just got from querying the MySQL
$runthatquery=mysql_query($runsql);
// Here it should run "SELECT name FROM customers WHERE name='$var'"
.
.
// I removed the code that print the query results
?>
问题是 $runsql 会从 R02运行“SELECT name FROM customers”。它不会运行"SELECT name FROM customers WHERE name='$var'" - 因为 $var 没有扩展。
我知道一旦从 MySQL 中检索到字符串,可以使用带有 substr、replace(等等)的函数来更改字符串。我不想这样做,因为我的现实生活中的代码有很多变量。
我试过 eval 和 parse_str (只是为了尝试)但没有成功。
因此,我的问题是:是否有命令将此字符串转换为适当扩展变量的字符串?