繁体   English   中英

语法错误或访问冲突:1064您在alter table中的SQL语法中有错误

[英]Syntax error or access violation: 1064 You have an error in your SQL syntax in alter table

我试图通过laravel stament函数改变auto_increment并且它给出了错误。

显示完整的错误消息是SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; 检查与您的MariaDB服务器版本对应的手册,以便在'?'附近使用正确的语法 在第1行(SQL:alter table 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>";
}

各地都不允许使用可变占位符

在声明中,? 可以将字符用作参数标记,以指示稍后在执行时将数据值绑定到查询的位置。

alter table在这里需要一个常量,例如你不能使用alter table bills AUTO_INCREMENT = (select max(id) from bills)这样的东西alter table bills AUTO_INCREMENT = (select max(id) from bills) 通常,在任何地方都可以执行此操作,您可以使用占位符(有一些例外情况,例如limit ,但在文档中会提到这些)。

所以在这种情况下你必须直接使用这个值:

DB::statement('alter table `bills` AUTO_INCREMENT = '.$invoice_no)

此处不允许使用可变占位符。 所以。 我这样做了,

DB::statement('alter table `bills` AUTO_INCREMENT = '.$invoice_no);

您可以用两种不同的方式编写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 bills AUTO_INCREMENT = '.$invoice_no);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM