来自$stemp [hasil] => 20,8,24
我的SQL查询SELECT * FROM 'objek' WHERE objek.id IN ('20','8','24')
我正在尝试DB::select("SELECT * FROM 'objek' WHERE objek.id IN ('$stemp')");
它不起作用,并获得错误数组到字符串转换。
答案 0 :(得分:1)
使用Laravel Query Builder方法进行查询:
DB::table('objek')->select('*')->whereIn('id', [20, 8, 4])->get()
请注意,由于查询构建器默认选择->select('*')
,因此不需要*
。所以你可以删除它:
DB::table('objek')->whereIn('id', [20, 8, 4])->get()
由于$stemp
是一个数组,因此需要在将其连接到查询之前将其转换为字符串:
$stemp = [20, 8, 24];
// Put your ID's between Quotes (not necessary actually, but
// I'm just trying to replicate the desired query)
$stemp = array_map(function($id) { return "'{$id}'"; }, $stemp); // ['20','8','24']
// Glue the pieces using a comma
$stemp = implode(',', $stemp); // string(13) "'20','8','24'"
// Now you can concatenate it to your query
// Note that you shouldn't use the single quotes between $stemp
// since your quotes are already on each number.
DB::select("SELECT * FROM 'objek' WHERE objek.id IN ($stemp)");
通过这种方式执行查询可以打开SQL Injection vulnerability,因此您必须执行以下任一操作:
$stemp
来自您信任该内容的其他查询答案 1 :(得分:1)
你应该这样做。
DB::table('objek')
->select('*')
->whereIn('id', $stemp)
->get();
您可以在laravel.com/docs/5.3/queries#where-clauses
中找到有关Laravel Where
的更多信息
但我更喜欢使用Eloquent
而不是DB::table()
。
您可以创建类似Objek
的模型,并使用Illuminate\Database\Eloquent\Model
use Illuminate\Database\Eloquent\Model;
class Objek extends Model
{
protected $table = 'Objek';
}
然后就可以了,
Objek::select('*')
->whereIn('id', $stemp)
->get();
答案 2 :(得分:0)
取决于您想要的方式
如果存在模型
Model::whereIn('columnName', $array)->get()
查询表
DB::table('users')->whereIn('columnName', $array)->get();
如果您想了解更多,请查看https://laravel.com/docs/5.3/queries#raw-expressions
希望这有帮助。
答案 3 :(得分:0)
我想你应该试试这个:
{{1}}
希望这对你有用!