从MySQL查询结果扩展PHP的字符串中的变量

时间:2013-10-01 19:31:34

标签: php mysql

以下代码是它的一个小版本。

我的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(只是为了尝试)但没有成功。

因此,我的问题是:是否有命令将此字符串转换为具有适当扩展变量的字符串?

1 个答案:

答案 0 :(得分:3)

您对PHP的工作方式存在根本的误解,并且将原始PHP变量名称存储在数据库记录中是错误的方法。如果 HAVE 存储类似的查询,则存储适当的预准备语句样式查询,例如

SELECT name WHERE name = :name

然后使用适当的数据库接口库(如mysqli或PDO)来填充这些占位符。