2013-08-02 42 views
-1

我在SQL數據庫中有大量的列,我需要它們。而不是在選擇查詢中指定它們,我只想使用SELECT *PHP從選擇數組中提取函數*

查詢運行正常,但我得到了一個未定義的索引錯誤:

Notice: Undefined index: servername in /var/www/backup/backupoverview.php on line 66

<?php 
while($row = mssql_fetch_array($result)) { 
    extract($row); 
?> 
    <tr> 
     <td><?=$row["servername"]?></td> 
     <td><?=$row["criticality"]?></td> 
     <td><?=$row["actioned"]?></td> 
    </tr> 
<?php 
} 
?> 

我的谷歌搜索指出我朝着提取功能,但似乎並沒有做任何事情。

任何想法讚賞!

+1

這將有助於如果您還貼出了$結果值 –

+1

了'提取物()'函數是完全沒有必要在這裏。問題在於你的行不包含名爲'servername'的字段。通過執行一個'print_r($ row)'來檢查它包含的內容' – Spudley

+0

'servername'是你的查詢返回的字段嗎?看起來它不是查詢的一部分。 – hdvianna

回答

2

首先,由於您正在閱讀$row['fieldname'],因此您不必提取$行。

然後實際的錯誤:如果您使用select *您將獲得所有列,但顯然servername不是其中之一。這就是錯誤告訴你的。

由於您似乎確定存在這樣的字段(我們沒有查詢,因此我必須採取措施),請注意數組索引是區分大小寫,所以如果列在數據庫中名爲SERVERNAME,您無法找到它,因爲它在數據庫中存在的情況下返回。這是指定精確列而不是*的一個優點:您知道選擇哪些列,並且可以指定它們的大小寫。

實際上,使用select *通常被認爲是不好的做法,所以也許你可以重新考慮指定你需要的確切的列。

+0

這是大小寫敏感的問題 - 非常感謝。 – Trinitrotoluene

1

綜觀通知,您可能需要採取在現場名稱細看,因爲所有它的意思是,沒有servername指數$row,這表明存在表
嘗試沒有servernamevar_dump(array_keys($row));循環內,並糾正你的錯字,或只是檢查你的tbl。

另外:mssql_fethc_array獲取的結果作爲數字索引陣列默認關聯數組,因爲你只assoc命令後陣的時候,我建議使用mssql_fetch_assoc代替,或mssql_fetch_object,如果對象不要嚇你;)
從文檔:

Returns an associative array that corresponds to the fetched row and moves the internal data pointer ahead. mssql_fetch_assoc() is equivalent to calling mssql_fetch_array() with MSSQL_ASSOC for the optional second parameter.

因此,要麼:

while($row = mssql_fetch_assoc($result)){} 
//or 
while($row = mssql_fetch_array($result, MSSQL_ASSOC)){} 

將導致$row成爲關聯數組只有
您現在也有效,但我認爲它沒有意義(因爲您沒有使用它們,所以不需要數字索引)。
雖然看到,因爲你只是建立一個表中的值:

while($row = mssql_fetch_array($result,MSSQL_NUM)) 
{ 
    echo vprintf('<tr>'. str_repeat('<td>%s</td>', count($row)).'</tr>', $row); 
} 

做到了這一點,無論如何,但有在數組鍵沒有錯字的風險。
請注意:像我這裏使用的單行遊戲時要小心,在這種情況下,這個語句不會太長,而且仍然非常可讀,但如果您使用這樣的東西太多,同事會詛咒並建議您去寫mindulck而不是

+2

錯誤。從手冊引用:「mssql_fetch_array()是mssql_fetch_row()的擴展版本。除了將數據存儲在結果數組的索引中之外,它還將數據存儲在關聯索引中,並使用字段名作爲關鍵字。 – kander

+1

Upvoter,謹慎解釋? –

+1

正確與錯誤,mssql_fetch_array()是mssql_fetch_row()的擴展版本。除了將數據存儲在結果數組的數字索引中之外,它還將數據存儲在關聯索引中,使用字段名稱作爲鍵(php.net)。 –

-1

如果你看一下提取函數的文檔,你會看到它所做的是將數組的值提取到當前範圍中。所以,如果你有一個數組:

array('servername'=>'localhost','criticality'=> 1,'actioned'=>'no);

這將做的是創建$ servername,$ criticality和$ actioned。不是你想要的。

請確保列名匹配(區分大小寫!)您在方括號之間有什麼。

2

A注意:未定義索引:servername表示在$ row數組中沒有索引servername

你必須在表中定義這樣的領域要查詢第一

雖然extract()實際上已經無關缺席索引。

1

更妙

<?php 
echo ' 
<table cellpadding="0" cellspacing="0" border="0" width="600" class="myTable"> 
    <tr> 
     <th>Servername</th> 
     <th>Criticality</th> 
     <th>Actioned</th>'; 
while($row = mysql_fetch_assoc($result)) 
{ 
    echo ' 
    <tr> 
     <td>'.$row['servername'].'</td> 
     <td>'.$row['criticality'].'</td> 
     <td>'.$row['actioned'].'</td> 
    </tr>'; 
} 

echo ' 
</table>';