2013-08-02 15 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>';