Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL в таблице изменения - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь изменить auto_increment с помощью функции stament laravel, и она выдает ошибку.

Полный вывод сообщения об ошибке: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '?' в строке 1 (SQL: изменить таблицу bills AUTO_INCREMENT = 9)

if($quantity[$i]>$qtny)
{
    Bills::where('id','=',$invoice_no)->delete();
    DB::enableQueryLog();
        DB::statement('alter table `bills` AUTO_INCREMENT=?',array('invoice_no'=>$invoice_no));
    dd(DB::getQueryLog());
    //return "<script>alert('Quantity is not available for product ".$item_name[$i]."');location.href='/create';</script>";
}

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Переменная Заполнитель здесь не допускается.Так.Я сделал таким образом,

DB::statement('alter table `bills` AUTO_INCREMENT = '.$invoice_no);
0 голосов
/ 30 мая 2019

Вы можете написать запрос laravel двумя разными способами, вы можете токенизировать переменную

1) Первый метод

if($quantity[$i]>$qtny)
{
    Bills::where('id','=',$invoice_no)->delete();
    DB::enableQueryLog();
        DB::statement('alter table `bills` AUTO_INCREMENT=:invoice_no',array('invoice_no'=>$invoice_no));
    dd(DB::getQueryLog());
    //return "<script>alert('Quantity is not available for product ".$item_name[$i]."');location.href='/create';</script>";
}

2) Второй метод

if($quantity[$i]>$qtny)
{
    Bills::where('id','=',$invoice_no)->delete();
    DB::enableQueryLog();
        DB::statement('alter table `bills` AUTO_INCREMENT=?',[$invoice_no]);
    dd(DB::getQueryLog());
    //return "<script>alert('Quantity is not available for product ".$item_name[$i]."');location.href='/create';</script>";
}

Вы также можете написать запрос ниже, но ваш запрос будет широко открыт для внедрения SQL.

DB::statement('alter table 1012 * счета *

0 голосов
/ 30 мая 2019

Переменные заполнители не разрешены везде:

В утверждении? символы могут использоваться в качестве маркеров параметров, чтобы указать, где значения данных должны быть связаны с запросом позже при его выполнении.

alter table здесь требуется постоянная величина, например, Вы не могли бы использовать что-то вроде alter table bills AUTO_INCREMENT = (select max(id) from bills). Как правило, везде, где вы можете это сделать, вам разрешено использовать заполнители (за некоторыми исключениями, такими как limit, но они упоминаются в документации 1013 *).

Так что в этом случае вы должны использовать значение напрямую:

DB::statement('alter table `bills` AUTO_INCREMENT = '.$invoice_no)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...