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分钟阅读: