【问题标题】:array_key_exists throwing error: The second argument should be either an array or an objectarray_key_exists 抛出错误:第二个参数应该是数组或对象
【发布时间】:2015-01-16 11:39:03
【问题描述】:

我检查了所有 29 个以前标记为 array_key_exists 的帖子,但我找不到与我的问题相关的特定问题的答案。我们的服务器最近更新了,我们已经升级到 PHP 5.2.17(是的,我知道这仍然落后,但随着我们继续推进,我们正在修复问题,而 5.3 导致了太多的问题需要同时处理,让5.4).

我们的网页抛出与 array_key_exists 相关的错误消息:

[ERROR][2][array_key_exists() [function.array-key-exists]:第二个 参数应该是数组或对象]

else if(array_key_exists("ACCOUNT", $_SESSION) && $_SESSION["ACCOUNT"] == $target){
    // do nothing, we are a-ok
}

在上面的代码中(我认为),我们正在检查当前帐户是否已经设置并存在会话。如果是这样,我们什么也不做。否则,我们在此之后的另一个 else 语句中设置会话。

$_SESSION["ACCOUNT"] 被设置在 cookie 中。值“ACCOUNT”是子域,也用于标识数据库中的帐户。以下是 cookie 中显示帐户已设置的行。该帐户确实存在。

SESSION[ACCOUNTID] = 39
SESSION[ACCOUNT] = demo
SESSION[PAIDACCOUNT] = 0

我的问题是现在应该如何对那行 php 进行编码以免引发该错误?

谢谢!

【问题讨论】:

  • var_dump($_SESSION);
  • 您的会话是通过session_start() 开始的吗?
  • 错误明确表示第二个参数 ($_SESSION)不是数组或对象。你检查过它是什么吗?
  • 猛禽,是的。 session_start() 之前被调用过。
  • deceze。它是一个数组......也许错误信息具有欺骗性?泽尔姆斯。 Dump 将其显示为一个数组。

标签: php arrays session cookies array-key-exists


【解决方案1】:

你应该改用isset

else if(isset($_SESSION["ACCOUNT"]) && $_SESSION["ACCOUNT"] == $target){
    // do nothing, we are a-ok
}

【讨论】:

  • 我不确定为什么这有效而我的无效,但错误消息消失了。这是从 php 4 到 php 5.2.17 的变化吗?
  • 我不确定 PHP 4 和 5.2.17 之间发生了什么变化,但这是可行的,因为如果 $_SESSION 尚不存在,array_key_exists 会抛出错误,而 isset 只会返回错误。
  • 感谢 BrokenBinary 的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-06-02
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多