是否可以使用PHP

时间:2016-06-07 14:59:46

标签: php sql

我有几个表连接在一起,但有几个列有相似的名称。我使用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

那么它会中断

2 个答案:

答案 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_ASSOCSQLSRV_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()