2016-04-21 81 views
0

前段時間我寫了一個PHP腳本,並將一些MySQL表名定義爲常量。現在我添加了一些更新,爲了簡化可讀性,我想在UPDATE語句中使用表格放棄。 在SELECT語句中,我使用它們時沒有像SELECT * FROM table t INNER JOIN table2 t2......那樣的問題,但是在UPDATE語句中它一直告訴我沒有找到我的列名。mysql update with table abbreviations

下面的例子:

$sql = $connection->prepare("UPDATE `" . TBLCUSTMANAGMNT . "` m 
          INNER JOIN `" . TBLCUSTOMERS . "` c ON (c.id = m.customerID) 
          SET `c.name` = :cName, `m.posOrder` = :posOrder, `m.posDeliver` = :posDeliver, `m.transactionFirst` = :transactionFirst, `m.transactionLast` = :transactionLast, 
           `m.transactionCount` = :transactionCount, `m.posCount` = :posCount, `m.posParticipation` = :posParticipation, `m.active` = :active 
          WHERE c.id = :id AND c.guid = :guid"); 

執行我得到一個錯誤,告訴我,該列c.name找不到了。

我是否必須明確寫出如下所示的全表名稱:tableNamecolumnName

在此先感謝

+1

不應該'TBLCUSTMANAGMNT'爲'$ TBLCUSTMANAGMNT'?你如何分配它?與客戶表 –

+2

nope相同,因爲正如我在開始時所說的那樣,這些不是變量,但常量和常量沒有「$」 –

+0

您是否嘗試過回顯字符串並手動運行它? –

回答

2

當使用反引號,你需要

`c`.`name` 

而不是

`c.name` 
+0

哦......你是對的夥伴!謝謝。 –

+0

我的榮幸鄉紳 – RiggsFolly

0

您正在使用引述錯誤的方式來做。 `c.name` - MySQL將查找'c.name'列。 `c`.`name` - 這是從表'c'獲取列'名稱'的正確方法。

+0

僅供參考:它們實際上被稱爲反引號而不是引號 – RiggsFolly