【问题标题】:PHP and mySQL Dynamic QueryPHP 和 mySQL 动态查询
【发布时间】:2013-05-08 19:11:47
【问题描述】:

我正在尝试根据用户选择的选项值中的任何或所有选择来创建动态查询。例如,如果他们选择项目 ID,则查询将返回项目 ID、大小和存储在第二个表中的课程,或者如果他们选择大小和部门,则将执行另一个查询。显示所有选定大小的项目以及针对它的课程。

这是我到目前为止所得到的。 我真的可以帮上忙。

<?php 
$pid = $_POST['project_id'] ;
$psize = $_POST['projectSize'] ;
$pdepts = $_POST['depts'] ;
$lstage = $_POST['stage'] ;
$ltype = $_POST['type'] ;
$impacted = $_POST['impacted'] ;


$sqlString = null;
echo "Total Number Of Captured Post Variables is:";
echo count($_POST);

echo '<br />';

 $number = 0;

foreach ($_POST as $param_name => $param_val ) {

if ($param_val ==""){


   }else{

     $number++;

   }

echo "Param: $param_name = $param_val<br />\n";
}
if($number ==1) {

}else{

}

?>

【问题讨论】:

    标签: php mysql dynamic dynamicquery


    【解决方案1】:

    我希望这可以帮助一点,我还添加了数组检查,您需要检查安全性和注入:)

    <?php 
    $pid = $_POST['project_id'] ;
    $psize = $_POST['projectSize'] ;
    $pdepts = $_POST['depts'] ;
    $lstage = $_POST['stage'] ;
    $ltype = $_POST['type'] ;
    $impacted = $_POST['impacted'] ;
    //Your columns in the DB 
    $columns = array('project_id'=>'project_id','project_size'=>'project_size','depts'=>'depts','stage'=>'stage'); 
    
    $sqlString = null;
    echo "Total Number Of Captured Post Variables is:";
    echo count($_POST);
    
    echo '<br />';
    
     $number = 0;
    $queryStr = ""; 
    $preStr = array(); 
    foreach ($_POST as $key => $val ) {
    
    if (!empty($_POST[$key])){
           if(!is_array($_POST[$key]))
               $currentStr = $columns[$key]." = ".$val; 
           else
               $currentStr = $columns[$key]." IN (".implode(',',$_POST[$key]).")"; 
    
           $preStr[] = $currentStr; 
       }
     }
    
    $queryStr = "SELECT * FROM tableName WHERE ".implode(' AND ',$preStr);
    echo $queryStr; 
    
    if($number ==1) {
    
    }else{
    
    }
    
    ?>
    

    【讨论】:

    • 谢谢我刚才检查一下,我在做一个 php 项目,没有最好的经验,所以想快速总结一下:)
    • 感谢 Sedz,我在(我更新了字段名和表名:)中添加了这一点:现在可以正确写入查询。因此,如果我不选择 project_id,则 uery 会说 WHERE size = 而这很酷。我的下一个问题是如何呈现查询以显示数据?
    【解决方案2】:

    这很简单,只需为您要运行的每个查询运行一个条件:

    if(isset($_POST['project_id'])){
        //they selected a Project ID.
        //write the query will return with the project ID, size and a lesson stored in a second table
    } elseif (isset($_POST['projectSize']) && isset($_POST['depts'])){
       //they selected a size and department
       // write a query displaying all projects that are of the chosen size with the lessons against it.
    } elseif (some other condition ){
       //you can keep adding conditions 
    }
    

    最后,您可能希望使用 mysql_real_escape_string 清理您的输入

    【讨论】:

      【解决方案3】:

      让它工作到这样的地步:当我回显 $queryStr 时,它输出为“SELECT FROM table WHERE”等。

      然后如何将该查询的输出显示到结果表中?

      【讨论】:

      • 我认为它应该类似于 $result = mysql_query($query) WHILE($row = mysql_fetch_assoc($result)) echo '.....
      猜你喜欢
      • 2014-10-04
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2019-01-23
      • 2013-03-25
      相关资源
      最近更新 更多