Php 当用户对表的输入可以任意组合时,如何构建SQL语句?

Php 当用户对表的输入可以任意组合时,如何构建SQL语句?,php,mysql,database,Php,Mysql,Database,示例:用户填写除产品名称以外的所有内容 我需要搜索提供的内容,因此在本例中,除了productName= 此示例可用于输入的任何组合 有办法做到这一点吗 谢谢 $name = $_POST['n']; $cat = $_POST['c']; $price = $_POST['p']; if( !($name) ) { $name = some character to select all? } $sql = "SELECT * FROM products

示例:用户填写除产品名称以外的所有内容

我需要搜索提供的内容,因此在本例中,除了
productName=

此示例可用于输入的任何组合

有办法做到这一点吗

谢谢

    $name = $_POST['n'];
    $cat = $_POST['c'];
    $price = $_POST['p'];

if( !($name) )
{
    $name = some character to select all?
}


$sql = "SELECT * FROM products WHERE productCategory='$cat' and   
productName='$name' and productPrice='$price' ";
编辑
解决方案不必防止攻击。特别关注它的动态部分。

类似

$where_array = array();

if( isset($_POST['n']) )$where_array[] = "productName = '{$_POST['n']}'";
if( isset($_POST['c']) )$where_array[] = "productCategory '{$_POST['c']}'";
if( isset($_POST['p']) )$where_array[] = "productPrice = '{$_POST['p']}'";

    $where_stmt = implode( ' and ', $where_array  );
    if( $where_stmt )  
    {
    $sql = "SELECT * FROM products WHERE $where_stmt ";
//run query
    }

很好,让我试一试。这是一个很好的解决方案,但是插入的变量应该是mysql\u real\u escape\u string()'d,否则它很容易受到mysql注入的影响。我还添加了引号来包装插入的变量,它不会像您发布的那样起作用。@marabutt:这个数字有效,但字符串的语法中有一个错误。{}应该用于字符串吗?可以粘贴var\u dump($\u POST);再次强调,在插入查询之前,必须对变量进行转义。在没有mysql\u real\u escape\u string()的情况下,不要将用户数据插入到查询字符串中,否则应用程序会被注入。作为执行MySQL的另一种安全方式,请查看它的一些做法。您是否知道您发布的代码是高度不安全的,并且容易受到攻击?如果没有,请花5分钟阅读: