Php Laravel:语法错误或访问冲突导致我使用';订单';我也喜欢田野

Php Laravel:语法错误或访问冲突导致我使用';订单';我也喜欢田野,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,当laravel执行一个查询时,我得到了这个错误 功能如下: public function updateOrder(Request $request) { $queryParams = []; $ids = $request->ids; //el query será definido en su totalidad de forma manual $query = 'UPDATE projects SET order

当laravel执行一个查询时,我得到了这个错误

功能如下:

public function updateOrder(Request $request)
   {

       $queryParams = [];

       $ids = $request->ids;


       //el query será definido en su totalidad de forma manual
       $query = 'UPDATE projects SET order = CASE id ';

       //agregamos cada parámetro de orden y de id al array para respetar las convenciones de PDO
       foreach ($ids as $order => $id) {
           $query .= 'WHEN ? THEN ? ';
           $queryParams[] = (int) $id;
           $queryParams[] = (int) $order;
       }

       //por último agregamos los ids implicados en el update
       $queryParams = array_merge($queryParams, $ids);

       //generamos los ? necesarios para el array de ids en el query PDO
       $whereInArray = array_fill(0, count($ids), '?');
       $whereInString = implode(", ", $whereInArray);

       //agregamos dicho string generado al query final
       $query .= "END WHERE id IN ($whereInString)";

       //realizamos el update
       DB::update($query, $queryParams);
   }     
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an 
error in your SQL syntax; check the manual that corresponds to your     
MySQL server version for the right syntax to use near ''projects' SET 
'order' = CASE 'id' WHEN ? THEN ? WHEN ? THEN ? WHEN ? THEN ? WHE' at 
line 1 (SQL: UPDATE 'projects' SET 'order' = CASE 'id' WHEN 25 THEN 0 
WHEN 23 THEN 1 WHEN 26 THEN 2 WHEN 19 THEN 3 WHEN 27 THEN 4 WHEN 18 
THEN 5 WHEN 28 THEN 6 WHEN 14 THEN 7 WHEN 24 THEN 8 WHEN 20 THEN 9 
WHEN 12 THEN 10 WHEN 13 THEN 11 WHEN 17 THEN 12 WHEN 29 THEN 13 WHEN 
15 THEN 14 WHEN 21 THEN 15 WHEN 16 THEN 16 WHEN 22 THEN 17 WHEN 4 
THEN 18 WHEN 3 THEN 19 WHEN 1 THEN 20 WHEN 6 THEN 21 WHEN 9 THEN 22 
WHEN 8 THEN 23 WHEN 5 THEN 24 WHEN 2 THEN 25 WHEN 10 THEN 26 WHEN 11 
THEN 27 WHEN 7 THEN 28 END WHERE id IN (25, 23, 26, 19, 27, 18, 28, 
14, 24, 20, 12, 13, 17, 29, 15, 21, 16, 22, 4, 3, 1, 6, 9, 8, 5, 2, 
10, 11, 7))
我想我知道问题出在哪里了,我的字段叫做order,我想order是由Laravel保留的

我所有的应用程序都使用“订单”字段

例如,我尝试将其更改为“订购”,并且效果良好,但我无法更改所有项目

我怎样才能做到这一点,使用订单

错误如下所示:

public function updateOrder(Request $request)
   {

       $queryParams = [];

       $ids = $request->ids;


       //el query será definido en su totalidad de forma manual
       $query = 'UPDATE projects SET order = CASE id ';

       //agregamos cada parámetro de orden y de id al array para respetar las convenciones de PDO
       foreach ($ids as $order => $id) {
           $query .= 'WHEN ? THEN ? ';
           $queryParams[] = (int) $id;
           $queryParams[] = (int) $order;
       }

       //por último agregamos los ids implicados en el update
       $queryParams = array_merge($queryParams, $ids);

       //generamos los ? necesarios para el array de ids en el query PDO
       $whereInArray = array_fill(0, count($ids), '?');
       $whereInString = implode(", ", $whereInArray);

       //agregamos dicho string generado al query final
       $query .= "END WHERE id IN ($whereInString)";

       //realizamos el update
       DB::update($query, $queryParams);
   }     
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an 
error in your SQL syntax; check the manual that corresponds to your     
MySQL server version for the right syntax to use near ''projects' SET 
'order' = CASE 'id' WHEN ? THEN ? WHEN ? THEN ? WHEN ? THEN ? WHE' at 
line 1 (SQL: UPDATE 'projects' SET 'order' = CASE 'id' WHEN 25 THEN 0 
WHEN 23 THEN 1 WHEN 26 THEN 2 WHEN 19 THEN 3 WHEN 27 THEN 4 WHEN 18 
THEN 5 WHEN 28 THEN 6 WHEN 14 THEN 7 WHEN 24 THEN 8 WHEN 20 THEN 9 
WHEN 12 THEN 10 WHEN 13 THEN 11 WHEN 17 THEN 12 WHEN 29 THEN 13 WHEN 
15 THEN 14 WHEN 21 THEN 15 WHEN 16 THEN 16 WHEN 22 THEN 17 WHEN 4 
THEN 18 WHEN 3 THEN 19 WHEN 1 THEN 20 WHEN 6 THEN 21 WHEN 9 THEN 22 
WHEN 8 THEN 23 WHEN 5 THEN 24 WHEN 2 THEN 25 WHEN 10 THEN 26 WHEN 11 
THEN 27 WHEN 7 THEN 28 END WHERE id IN (25, 23, 26, 19, 27, 18, 28, 
14, 24, 20, 12, 13, 17, 29, 15, 21, 16, 22, 4, 3, 1, 6, 9, 8, 5, 2, 
10, 11, 7))

如果使用诸如
from
order
之类的列名称作为列名而不在其周围使用反勾号,则可能会发生此错误。在您的情况下,问题在于单词
顺序
。因此,改变:

$query = 'UPDATE projects SET order = CASE id ';
致:

它应该会起作用。反勾号转义列名。此类名称称为“引用标识符”


一些程序员不喜欢使用反勾号,所以他们使用的列名明显避免了保留字集

您可以用projects.order替换order。这将是有效的

我想看看
projects
是否是MySQL中的保留字,但它似乎不是。然而,最常见的解决方法是在单词周围加上记号。很容易尝试:
UPDATE`projects`SET
。projects它不是保留的,但我想是的。当然是的。所以:
更新项目集`order`=CASE….
。在任何地方使用回虱更好吗?谢谢。你认为在所有单词中都加上“表名、字段名”是个好习惯吗?或者只有当它被保留的时候?你可以把它当作一个答案,我会接受它。感激它;)