以下のコードは、その小さなバージョンです。
私のMySQLテーブルの「レポート」は次のようになります。
レポート rep_id rep_description rep_query varchar 3 varchar 50 varchar 50 -------------------------------------------------- --------------------------- | | R01 | 名前検索 | SELECT name FROM customers WHERE name='$var' | -------------------------------------------------- --------------------------- | | R02 | すべての名前 | 顧客から名前を選択 | -------------------------------------------------- ---------------------------
1 つの 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" を実行することです。$var が展開されていないため、「SELECT name FROM customers WHERE name='$var'」は実行されません。
MySQL から文字列を取得したら、substr、replace (など) を使用して関数を使用して文字列を変更できることを私は知っています。私の実際のコードには多くの変数があるため、私はそれをしたくありません。
eval と parse_str を試してみましたが(試してみただけです)、成功しませんでした。
したがって、私の質問は次のとおりです。変数を適切に展開して、この文字列を文字列に変換するコマンドはありますか?