您好我收到以下错误:
注意:未定义的索引:$ 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';
}
答案 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...
与变量本身有关,但事实并非如此。