我正在写一个相册应用程序并遇到了一个奇怪的问题,这个问题在我的生产服务器上看起来很明显,只有PHP 5.5.6而不是我的开发机器上有PHP 5.4.7。我想知道这个问题是由于PHP的新版本(不知道某项功能或错误),两台服务器的配置不同或两者兼而有之。
我在课程Data
中定义了以下函数:
public static function getAlbum ($key)
{
$stmt = self::$db->prepare ("SELECT * FROM `albums` WHERE `album_key` = ?;");
$stmt->execute (array ($key));
$rows = $stmt->fetchAll (PDO::FETCH_ASSOC);
if (array_key_exists (0, $rows))
{
return $rows [0];
}
else
{
return array ();
}
}
对于给定的$key
,此功能已经过测试并且有效。
在调用代码中,我有以下内容:
$album = Data::getAlbum ($_REQUEST ['key']);
$page->bodyAppend ("> {$album ['album_name']} ");
执行print_r
变量的$album
表示数组中存在索引'album_name'
,从而暗示值$_REQUEST ['key']
是一个有效的密钥,方法Data::getAlbum
按预期工作。但是,此代码会在日志中生成通知:PHP Notice: Undefined index: album_name in <<filename>> on line <<line#>>
然而,奇怪的是,字符串通过bodyAppend
方法正确附加,包括来自(显然)未定义索引的值。
如果我将代码修改为:
,则此通知消息将消失$album = Data::getAlbum ($_REQUEST ['key']);
if (isset ($album ['album_name']))
{
$page->bodyAppend ("> {$album ['album_name']} ");
}
或者如果我按如下方式修改代码:
$album = Data::getAlbum ($_REQUEST ['key']);
if (count ($album) > 0)
{
$page->bodyAppend ("> {$album ['album_name']} ");
}
任何线索?
我并不怀疑对密钥存在的高级检查是一件好事(所以我很乐意在代码中留下我的修改) - 但这是我第一次遇到这种情况错误。
答案 0 :(得分:0)
这是我学会识别的常见错误模式:
这些过去让我围成一圈,但总是归结为以下几点:
浏览您的代码并查看您调用该函数的所有位置。在调用之前打印出参数。最有可能的是,你会发现你调用函数的次数比你想象的要多,而且参数在某种程度上是无效的。