簡體   English   中英

CakePHP 3錯誤:SQLSTATE [42000]:語法錯誤或訪問沖突: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

我認為它將'Col from Colleges'作為關鍵字'COL',但是我不確定。 如何解決這個問題?

這是生成MySQL查詢的CakePHP代碼:

return $college_admins->find()
    ->select(['Colleges.*'])
    ->leftJoinWith('Colleges')
    ->where(['CollegeAdmins.user_id' => $userId]);

您不能在CakePHP ORM查詢(CakePHP 3.x)中使用Colleges.* 如您所知,這會創建不正確的SQL別名,例如Colleges__* 而是選擇一個表的所有列,您需要傳遞一個表對象。

所以您可能想要做類似的事情:-

->select($college_admins->Colleges)

假設Colleges與您的CollegeAdmins表相關聯。

您不能為colleges。*加上別名,因為這是指colleges表中的所有列,而別名是指單個列(或表或子查詢)。 您需要列出colleges表中的所有字段,並為每個字段提供一個別名,例如

select colleges.ig as colleges_id, colleges.field1 as colleges_field1, ...

sql中沒有語法提供這種方式的別名。 您可能想做的是訪問mysql在php中返回的元數據,以檢索每個字段的表名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM