如何在 Laravel 中使用 SQL 原始查询
How to use SQL raw query in Laravel
SQL table:
SELECT id,
account_name,
parent_id
FROM
(SELECT id,
account_name,
parent_id,
CASE
WHEN id = 1 THEN @idlist := CONCAT(id)
WHEN FIND_IN_SET(parent_id, @idlist) THEN @idlist := CONCAT(@idlist, ',', id)
END AS checkId
FROM chart_of_account
ORDER BY id ASC) AS T
WHERE checkId IS NOT NULL
当我在 MySQL 中 运行 这个查询时,它工作正常并且结果被完美地获取,但是当我 运行 在 Laravel 中时,它像这样:
$accountId = DB::select('SELECT id,account_name,parent_id FROM
(SELECT id,account_name,parent_id,
CASE WHEN id = '.$account_id.' THEN @idlist := CONCAT(id)
WHEN FIND_IN_SET(parent_id,@idlist) THEN @idlist := CONCAT(@idlist,', ',id)
END as checkId
FROM chart_of_account
ORDER BY id ASC) as T
WHERE checkId IS NOT NULL');
报错
Argument 1 passed to Illuminate\Database\Connection::prepareBindings() must be of the type array, string given,
试试这个:
$query = 'YOUR_QUERY_THE_BIG_ONE:)';
$result = DB::select($query,[]);
dd($result);
可选地,您可以在使用用户输入的任何地方使用 ?
登录查询以防止 mySQL 注入问题,然后在 select
函数的第二个参数数组中提供它们的值.一个例子是:
$inputUserEmail = $request->input('email');
$query = 'SELECT * FROM users WHERE email=?';
$result = DB::select($query,[$inputUserEmail]);
dd($result);
我希望它能给你一个想法
SQL table:
SELECT id,
account_name,
parent_id
FROM
(SELECT id,
account_name,
parent_id,
CASE
WHEN id = 1 THEN @idlist := CONCAT(id)
WHEN FIND_IN_SET(parent_id, @idlist) THEN @idlist := CONCAT(@idlist, ',', id)
END AS checkId
FROM chart_of_account
ORDER BY id ASC) AS T
WHERE checkId IS NOT NULL
当我在 MySQL 中 运行 这个查询时,它工作正常并且结果被完美地获取,但是当我 运行 在 Laravel 中时,它像这样:
$accountId = DB::select('SELECT id,account_name,parent_id FROM
(SELECT id,account_name,parent_id,
CASE WHEN id = '.$account_id.' THEN @idlist := CONCAT(id)
WHEN FIND_IN_SET(parent_id,@idlist) THEN @idlist := CONCAT(@idlist,', ',id)
END as checkId
FROM chart_of_account
ORDER BY id ASC) as T
WHERE checkId IS NOT NULL');
报错
Argument 1 passed to Illuminate\Database\Connection::prepareBindings() must be of the type array, string given,
试试这个:
$query = 'YOUR_QUERY_THE_BIG_ONE:)';
$result = DB::select($query,[]);
dd($result);
可选地,您可以在使用用户输入的任何地方使用 ?
登录查询以防止 mySQL 注入问题,然后在 select
函数的第二个参数数组中提供它们的值.一个例子是:
$inputUserEmail = $request->input('email');
$query = 'SELECT * FROM users WHERE email=?';
$result = DB::select($query,[$inputUserEmail]);
dd($result);
我希望它能给你一个想法