[英]How can I get the right column after a join using PDO?
我有兩個如下的MySql表:
Cat
------
id : INT NOT NULL PRIMARY KEY
name : VARCHAR(32)
Cheezburger
-------
id : INT NOT NULL PRIMARY KEY
catId : INT FOREIGN KEY REFERENCES Cat (id)
pattyCount : INT
當我使用PHP的PDO在兩個表上執行LEFT JOIN
時,我將執行以下操作:
$database = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $pasword);
$query = $database->prepare('
SELECT * FROM Cat
LEFT JOIN Cheezebuger.id ON Cheezburger.catId = cat.id
WHERE Cat.id = ?');
$query->bindParam(1, $someId);
$query->execute();
$cat = $query-fetch();
我的問題是,如何區分與Cat
表關聯的id
字段和與Cheezburger
表關聯的id
? $cat['id']
給我Cheezburger
id
字段。
SELECT *
通常是不建議的。 相反,請明確說明所需的列,並為別名列分配別名:
SELECT
Cat.id AS catid,
Cat.name AS name,
Cheezeburger.id AS chzid,
...
FROM
Cat LEFT JOIN Cheezebuger.id ON Cheezburger.catId = cat.id
WHERE Cat.id = ?
現在,要獲取Cat.id
,請使用$cat['catid']
並要獲取Cheezeburger.id
,請使用$cat['chzid']
。
反對執行SELECT *
一個重要原因是,如果以后添加更多的列,而這在應用程序的此特定部分中是不需要的,則不會在數據庫服務器上使用額外的內存來檢索不需要的數據並將其提取到Web應用程序中不會被使用的地方 如果稍后碰巧添加了二進制BLOB列,則可能會不必要地獲取更多數據。
另一個原因是您發現的原因。 您可以在列名中引起歧義。
避免使用'lazy' *
並明確指定您想要的字段:
SELECT cat.ID AS catID, Cheezeburger.id AS icanhaz ...
您將需要枚舉字段,並將其列出,所以就像
SELECT cat.id as catId, cat.name, cheezburger.id as cheezId ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.