CakePHP 3 Error: SQLSTATE[42000]: Syntax error or access violation: 1064
CakePHP 3 Error: SQLSTATE[42000]: Syntax error or access violation: 1064
我收到此错误:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS `Colleges__*` FROM college_admins CollegeAdmins LEFT JOIN colleges Colleges O' at line 1
这是出现此错误的 SQL 查询:
SELECT Colleges.* AS `Colleges__*` FROM college_admins CollegeAdmins LEFT JOIN colleges Colleges ON Colleges.id = (CollegeAdmins.college_id) WHERE CollegeAdmins.user_id = :c0 LIMIT 20 OFFSET 0
我启用了 quoteIdentifiers config\app,但它导致了这个新错误:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS `Colleges__*` FROM `college_admins` `CollegeAdmins` LEFT JOIN `colleges` `Col' at line 1
查询变为:
SELECT `Colleges`.* AS `Colleges__*` FROM `college_admins` `CollegeAdmins` LEFT JOIN `colleges` `Colleges` ON `Colleges`.`id` = (`CollegeAdmins`.`college_id`) WHERE `CollegeAdmins`.`user_id` = :c0 LIMIT 20 OFFSET 0
我认为它以 Colleges 的 'Col 作为关键字 'COL',但我不确定。如何解决这个问题?
这是生成 MySQL 查询的 CakePHP 代码:
return $college_admins->find()
->select(['Colleges.*'])
->leftJoinWith('Colleges')
->where(['CollegeAdmins.user_id' => $userId]);
您不能为学院起别名。*,因为这指的是学院 table 中的所有列,而别名指的是单个列(或 table 或子查询)。您需要列出学院内的所有字段 table 并为每个字段提供一个别名,例如
select colleges.ig as colleges_id, colleges.field1 as colleges_field1, ...
sql 中没有提供这样的别名的语法。您可能会尝试访问 mysql 在 php 中返回的元数据,以检索每个字段的 table 名称。
您不能在 CakePHP ORM 查询 (CakePHP 3.x) 中使用 Colleges.*
。正如您所发现的那样,这会创建不正确的 SQL 别名,例如 Colleges__*
。而不是 select table 的所有列,您需要传递一个 table 对象。
所以你可能想要做这样的事情:-
->select($college_admins->Colleges)
假设 Colleges
与您的 CollegeAdmins
table 关联。
我收到此错误:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS `Colleges__*` FROM college_admins CollegeAdmins LEFT JOIN colleges Colleges O' at line 1
这是出现此错误的 SQL 查询:
SELECT Colleges.* AS `Colleges__*` FROM college_admins CollegeAdmins LEFT JOIN colleges Colleges ON Colleges.id = (CollegeAdmins.college_id) WHERE CollegeAdmins.user_id = :c0 LIMIT 20 OFFSET 0
我启用了 quoteIdentifiers config\app,但它导致了这个新错误:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS `Colleges__*` FROM `college_admins` `CollegeAdmins` LEFT JOIN `colleges` `Col' at line 1
查询变为:
SELECT `Colleges`.* AS `Colleges__*` FROM `college_admins` `CollegeAdmins` LEFT JOIN `colleges` `Colleges` ON `Colleges`.`id` = (`CollegeAdmins`.`college_id`) WHERE `CollegeAdmins`.`user_id` = :c0 LIMIT 20 OFFSET 0
我认为它以 Colleges 的 'Col 作为关键字 'COL',但我不确定。如何解决这个问题?
这是生成 MySQL 查询的 CakePHP 代码:
return $college_admins->find()
->select(['Colleges.*'])
->leftJoinWith('Colleges')
->where(['CollegeAdmins.user_id' => $userId]);
您不能为学院起别名。*,因为这指的是学院 table 中的所有列,而别名指的是单个列(或 table 或子查询)。您需要列出学院内的所有字段 table 并为每个字段提供一个别名,例如
select colleges.ig as colleges_id, colleges.field1 as colleges_field1, ...
sql 中没有提供这样的别名的语法。您可能会尝试访问 mysql 在 php 中返回的元数据,以检索每个字段的 table 名称。
您不能在 CakePHP ORM 查询 (CakePHP 3.x) 中使用 Colleges.*
。正如您所发现的那样,这会创建不正确的 SQL 别名,例如 Colleges__*
。而不是 select table 的所有列,您需要传递一个 table 对象。
所以你可能想要做这样的事情:-
->select($college_admins->Colleges)
假设 Colleges
与您的 CollegeAdmins
table 关联。