如何使用DB :: insert作为预处理语句LARAVEL

时间:2017-11-10 16:35:55

标签: php sql-server laravel laravel-5.5

我正在尝试使我的插入查询免受sql注入。但我有问题让这个工作。有任何想法吗? 我尝试过几件事。

 $bullets = Input::get('bullet_content');
        $product_id = Input::get('product_id');
        $user_id = Input::get('user_id');
        $retailer_id = Input::get('retailer_id');
        $date = date("Y-m-d H:i:s");
        foreach ($bullets as $bullet){


            $query = "'INSERT INTO bullets(product_id, user_id,bullet_content, bullet_deleted, created_at, updated_at) 
                        VALUES('?','?','?','?','?','?')', [$product_id,$user_id,$bullet,'N',$date,$date]";


                        DB::insert($query);
        }
        return back()->with('message','Features add successfully!');

当我尝试这个时,我得到以下错误:

SQLSTATE[07002]: [Microsoft][ODBC Driver 11 for SQL Server]COUNT field incorrect or syntax error (SQL: 'INSERT INTO bullets(product_id, user_id,bullet_content, bullet_deleted, created_at, updated_at) VALUES('?','?','?','?','?','?')', [1,1,can't,'N',2017-11-10 16:28:44,2017-11-10 16:28:44])

我也尝试过:

 $bullets = Input::get('bullet_content');
        $product_id = Input::get('product_id');
        $user_id = Input::get('user_id');
        $retailer_id = Input::get('retailer_id');
        $date = date("Y-m-d H:i:s");
        foreach ($bullets as $bullet){


            $query = "'INSERT INTO bullets(product_id, user_id,bullet_content, bullet_deleted, created_at, updated_at) 
                        VALUES('?','?','?','?','?','?')' ";
            $values = [$product_id,$user_id,$bullet,'N',$date,$date];

                        DB::insert($query,$values);
        }
        return back()->with('message','Features add successfully!');

并收到以下错误:

SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near 'INSERT INTO bullets(product_id, user_id,bullet_content, bullet_deleted, created_at, updated_at) VALUES('. (SQL: 'INSERT INTO bullets(product_id, user_id,bullet_content, bullet_deleted, created_at, updated_at) VALUES('1','1','can't','N','2017-11-10 16:33:43','2017-11-10 16:33:43')' )

1 个答案:

答案 0 :(得分:3)

您无需引用问号。此外,您可以在循环之前初始化 $ query ,并将其用作 foreach 中准备好的查询:

$bullets = Input::get('bullet_content');
$product_id = Input::get('product_id');
$user_id = Input::get('user_id');
$retailer_id = Input::get('retailer_id');
$date = date("Y-m-d H:i:s");
$query = "INSERT INTO bullets (product_id, user_id,bullet_content, bullet_deleted, created_at, updated_at) 
                       VALUES (?, ?, ?, ?, ?, ?)";
foreach ($bullets as $bullet) {
    $values = [$product_id,$user_id,$bullet,'N',$date,$date];
    DB::insert($query, $values);
}
return back()->with('message','Features add successfully!');