在PHP查询中声明变量,子查询不起作用。未定义的索引:deviceName

时间:2011-08-15 09:47:23

标签: php mysql

我在php语句中声明了一些值。子查询之外的2个值声明正常,但子查询中的一个不起作用,并且给了我Undefined index:deviceName。

    $sql4 = "SELECT endPort, startPort, 
        ( 
            SELECT deviceName
            FROM devices
            WHERE devices.deviceID = patching.endDeviceID
        )
    FROM patching
    WHERE deviceID =  '$deviceID'
    LIMIT 0 , 10"; 

    $query4 = mysql_query($sql4);
    while ($row = mysql_fetch_array($query4))
        {
            $startp = $row['startPort'];
            $endp = $row['endPort'];
            $endname= $row['deviceName'];

            echo '<tr class="logm"><td>'.$startp.'</td><td></td><td>'.$endname.'</td><td></td><td>'.$endp.'</td><td></td></tr>';

        }

是否可以声明此值并且我做错了还是有另一种解决此问题的方法。

2 个答案:

答案 0 :(得分:0)

您应该使用联接:

SELECT endPort, startPort, deviceName
FROM patching
LEFT JOIN devices USING (deviceID)
WHERE deviceID = '$deviceID'
LIMIT 0 , 10

注意:如果$deviceID是用户输入,则必须使用mysql_real_escape_string转义它或使用prepared statements

答案 1 :(得分:0)

您没有给子查询结果命名:

SELECT endPort, startPort,
    ( 
        SELECT deviceName
        FROM devices
        WHERE devices.deviceID = patching.endDeviceID
    ) AS deviceName
FROM patching
WHERE deviceID = '$deviceID'
LIMIT 0, 10

虽然你应该使用连接,而不是子查询:

SELECT endPort, startPort, deviceName
  FROM patching
  LEFT JOIN devices ON(devices.deviceID = patching.endDeviceID)
 WHERE patching.deviceID = '$deviceID'
 LIMIT 0, 10