Как использовать SQL необработанный запрос в Laravel - PullRequest
0 голосов
/ 18 февраля 2019

Таблица SQL:

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, 

1 Ответ

0 голосов
/ 18 февраля 2019

Попробуйте это:

$query = 'YOUR_QUERY_THE_BIG_ONE:)';
$result = DB::select($query,[]);
dd($result);

При желании вы можете использовать знак ? в своем запросе, где бы вы ни использовали пользовательские вводы, чтобы предотвратить проблему внедрения MySQL, а затем указать их значение во втором массиве параметров * 1005.* функция.Один из примеров:

$inputUserEmail = $request->input('email');
$query = 'SELECT * FROM users WHERE email=?';
$result = DB::select($query,[$inputUserEmail]);
dd($result);

Надеюсь, это даст вам идею

...