Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 您可以使用查询生成器在运行时在laravel中使用动态WHERE子句构建查询吗?_Php_Security_Laravel - Fatal编程技术网

Php 您可以使用查询生成器在运行时在laravel中使用动态WHERE子句构建查询吗?

Php 您可以使用查询生成器在运行时在laravel中使用动态WHERE子句构建查询吗?,php,security,laravel,Php,Security,Laravel,因此,我知道,如果我构建一个动态SQL字符串,我可以执行如下操作 $SQL = "SELECT * FROM " . $table; $first = 1; foreach($items as $key => $val) { if($first) $SQL .= " WHERE "; else $SQL .= " AND "; $SQL .= $key . " LIKE " . $VAL; $first = 0; } 然后调用DB::Query($SQL

因此,我知道,如果我构建一个动态SQL字符串,我可以执行如下操作

$SQL = "SELECT * FROM " . $table;

$first = 1;
foreach($items as $key => $val)
{
   if($first) $SQL .= " WHERE ";
       else $SQL .= " AND ";
   $SQL .= $key . " LIKE " . $VAL;
   $first = 0;
}
然后调用
DB::Query($SQL)

但这不会自动保护用户输入

如果我在laravel中使用查询生成器,用户输入将自动清理,但我不知道如何使用查询生成器在运行时创建具有动态数量的where子句的查询。这可能吗

$query = $tableModel->newQuery();

foreach($items as $key => $val) {
    $query->where($key, "LIKE", '%'.$val.'%');
}
像这样的东西是你想要的吗


编辑:看起来Mark比我快了。

如果where子句的数量在运行时定义并且(可能)是无界的,我该怎么做?您如何知道用于构建查询字符串<代码>$query->where($key,'=',$val)?PS:为什么在这里像使用
一样使用?那么这不会对数组中的每个元素执行不同的查询吗?还是最终只执行一条语句,同时使用所有where子句过滤数据?如果是后者,你怎么打电话?我认为您必须使用以下格式的查询生成器“DB::table('mytable')->…”不,它构建一个查询,然后使用
$Query->all()
(或类似)执行该查询。。。。每次使用
$query->where()
都只是在该查询中添加一个新的where子句(除非使用orWhere(),否则默认情况下是匹配的)。我看不出在laravel的文档
公共函数newQuery($excludedelected=true)中哪里可以执行$query->all()
是为
照明\数据库\雄辩\模型
定义的方法
公共静态函数all($columns=array('*'))
方法在同一个模型类中定义。您自己的所有模型都应该扩展
illumb\Database\elount\Model
-如果您想要的是旧版本的Laravel的答案,那么您应该在问题中指定。。。我的答案对于Laravel4+是有效的,但我从未使用过Laravel3so,这不是对数组中的每个元素执行不同的查询吗?还是最终只执行一条语句,同时使用所有where子句过滤数据?如果是后者,你怎么打电话?我认为您必须使用以下格式的查询生成器“DB::table('mytable')->…”
foreach( $items as $key => $value )
{
    $query->where( $key, '=', $value );
}