2013-10-01 2 views
-3

Код ниже - крошечная версия.Расширение переменных в строке для 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 
?> 

Проблема заключается в том, что $ runsql ЗАПУСКАЕТСЯ "ВЫБОР имя от клиентов" от R02. И это НЕ ЗАПУСКАЕТ "SELECT name FROM customers WHERE name = '$ var'" - Потому что $ var не расширяется.

Я знаю, что можно использовать функцию с substr, replace (и т. Д.), Чтобы изменить строку после ее получения из MySQL. Я не хочу этого делать, потому что у моего кода реальной жизни много переменных.

Я пробовал eval и parse_str (просто попробовать) без успеха.

Следовательно, мой вопрос: есть ли команда для преобразования этой строки в строку с правильным расширением переменных?

+1

явно не тот код, который используется в качестве его синтаксических ошибок. вставьте * точный * код, не можете отлаживать приближение. –

+0

$ runql = mysql_result $ result, 0, sqlquery); отсутствует скобка. – Mihai

+0

Почему вы храните SQL-запросы в базе данных ?! SQLception? – deceze

ответ

3

У вас есть фундаментальное непонимание того, как работает PHP, а также хранить необработанные имена переменных PHP в ваших записях базы данных - это НЕПРАВИЛЬНЫЙ способ обойти это. Если у вас есть HAVE, чтобы сохранить такие запросы, а затем сохранить правильные запросы в стиле готового заявления, например.

SELECT name WHERE name = :name 

затем используйте соответствующую библиотеку интерфейса DB, такую ​​как mysqli или PDO, чтобы заполнить эти заполнители.

+0

Я этого не заметил, ничего себе новый :-) –

+0

У меня есть генератор отчетов. «Список» отчетов содержит имя отчетов, запросов, типа и т. Д., Которые хранятся в таблице MySQL. Мое желание состояло в том, чтобы отчеты содержали максимальную информацию для одного «генератора» php. Если у меня есть SQL каждого отчета, я не буду иметь файл для каждого из них. – Andreluiz

Смежные вопросы