参数上未定义的索引,无法定义

时间:2014-02-26 15:05:20

标签: php string variables

您好我收到以下错误:

  

注意:未定义的索引:$ db_field。

这是因为我没有声明参数:$db_field - 调用此函数时:

if (checkInField($webmailUserName,$db_connection,$db_con_table,"userName") == false)

第四位是一个明确的字符串,PHP不像Java那样你声明变量int,long,string等所以我使用了echo $db_field并且确实在屏幕上的echo显示了'userName'所以我认为它被认为是一个字符串?

我试过echo $row[$db_field];(不起作用)

我已经尝试echo $row['db_field'];(如果我理解的话,使用'表示字符串不起作用)

我试过echo $row['userName'];(此字符串有效)

但我可以查看我不明白该怎么做的isset()。我的错误描述的其他帖子似乎与我想要达到的目标不相符。

请有人向我解释为什么echo $row[]无法将'$db_field'识别为字符串以及修复它所需的内容。希望这也有助于其他初学者。

我正在使用PHP5.3并且无法检查任何服务器ini,因为我正在为我的脚本使用域和网络服务器公司。 (Another Undefined Index (this one's defined though)

function checkInField($value,$db_connection,$db_con_table, $db_field)  
// Checks a value is not within a database field
{       
    $query = "SELECT $db_field FROM $db_con_table WHERE $db_field='$value'"; 
    $result = $db_connection->query($query) or die($mysqli->error());

    // GOING THROUGH THE DATA
    if($result->num_rows > 0) 
    {
        while($row = $result->fetch_assoc()) 
        {
            echo $row['$db_field']; 
        }
    }
    else
    {
        echo 'NO RESULTS';  
    }

1 个答案:

答案 0 :(得分:2)

关于Undefined index: $db_field的警告(又名通知)应该表明您正在尝试使用字符串Map.get()执行数组索引(如Java中的$db_field)。 (当您输入'$db_field'时,您希望它评估为userName,但事实并非如此。)

这是因为在PHP中,单引号字符串与双引号字符串不同。 (PHP Docs

所以,而不是:

echo $row['$db_field']; // indexing with the literal string $db_field

...使用:

echo $row[$db_field]; // if $db_field is numeric, acts like List.get(int); if $db_field is a string, acts like Map.get(Object)

echo $row["$db_field"]; // indexing with the string-representation of the variable named $db_field

关于前向声明变量:您的一个方法参数名为$db_field,因此在方法中引用该名称的变量(但不在其外部)是完全安全的。我认为你认为Undefined...与变量本身有关,但事实并非如此。