2016-04-21 121 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