以下代码是它的一个小版本。
我的MySQL表“报告”看起来像这样:
reports rep_id rep_description rep_query varchar 3 varchar 50 varchar 50 ----------------------------------------------------------------------------- | R01 | Name search | SELECT name FROM customers WHERE name='$var' | ----------------------------------------------------------------------------- | R02 | All names | SELECT name FROM customers | -----------------------------------------------------------------------------
一个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
?>
问题是来自R02的$ runsql 将RUN “SELECT name FROM customers”。 它不会运行“SELECT FROM FROM FROM WHERE name ='$ var'” - 因为$ var未扩展。
我知道可以使用带有substr的函数,替换(等等)来从MySQL中检索字符串后更改字符串。 我不想这样做因为我的真人生活代码有很多变数。
我尝试过eval和parse_str(只是为了尝试)但没有成功。
因此,我的问题是:是否有命令将此字符串转换为具有适当扩展变量的字符串?
答案 0 :(得分:3)
您对PHP的工作方式存在根本的误解,并且将原始PHP变量名称存储在数据库记录中是错误的方法。如果 HAVE 存储类似的查询,则存储适当的预准备语句样式查询,例如
SELECT name WHERE name = :name
然后使用适当的数据库接口库(如mysqli或PDO)来填充这些占位符。