我有几个表连接在一起,但有几个列有相似的名称。我使用php来获取这些值,但是我无法在php中使用sql标识符来选择正确的列...即在SQL中我有两个表Register和Jurisdict。他们俩都有一个名为" name"的列。在SQL中我可以像这样引用这些列
r.name
j.name
这些会给我两个不同表中的值。但是我在PHP中无法使用r。或者j。并且只要我使用name,它就会返回SQL语句中首先选择的表。
这是我目前的代码
<?php
$sql = "
SELECT j.rpt_name, r.name
FROM [SMARTCM] . [dbo] . [REGISTER] r
join [SMARTCM] . [dbo] . [jurisdict] j
on j.UniqueKey = r.FK_JURSDICT_KEY
$stmt = sqlsrv_query( $conn, $sql );
?>
我使用while循环生成PHP,使用此标记引用列
<?php echo $row['name']; ?>
但是,如果我尝试使用表格引用(r.name),就像我会使用sql
那么它会中断答案 0 :(得分:3)
您需要使用SQL查询的别名功能..
<?php
$sql = "
SELECT j.name as j_name, r.name as r_name
FROM [SMARTCM] . [dbo] . [REGISTER] r
join [SMARTCM] . [dbo] . [jurisdict] j
on j.UniqueKey = r.FK_JURSDICT_KEY";
$stmt = sqlsrv_query( $conn, $sql );
echo $row['j_name'];
echo $row['r_name'];
?>
答案 1 :(得分:0)
您尚未共享行检索中涉及的代码,但我认为它正在使用sqlsrv_fetch_array()
。如果您查看documentation,您会看到它有一个名为$fetchType
的参数:
array sqlsrv_fetch_array(resource $ stmt [,int $ fetchType [,int $ row [,int $ offset]]])
fetchType
指定要返回的数组类型的预定义常量。可能 值为
SQLSRV_FETCH_ASSOC
,SQLSRV_FETCH_NUMERIC
和SQLSRV_FETCH_BOTH
(默认值)。
......然后是重要的一点:
使用包含多个同名列的结果集时,不应使用获取类型
SQLSRV_FETCH_ASSOC
。
所以你必须选择:
拥有重复名称并从数字数组中检索内容(SQLSRV_FETCH_NUMERIC
)
获取唯一名称,以便您可以使用关联数组
SELECT j.name AS j_name, r.name AS r_name
最后但并非最不重要的是,数组内容(或任何其他PHP变量)永远不应该是你的谜。请查看var_dump()。