php最常出现的错误

发布时间:2023年12月28日

目录

1. E_WARNING:为?foreach?()提供的参数无效

2. PDOException:拒绝SQLSTATEHY000连接

3.错误使用empty函数


1. E_WARNING:为?foreach?()提供的参数无效

PHP foreach构造在PHP 4中引入,提供了一种迭代数组和可迭代对象的简单方法,例如实现\Traversable接口的对象。尝试在具有不同数据类型或未初始化变量的变量上使用它。它将发出错误,例如下面的示例。

$ y_exceptions = null ;

foreach($ y_?Exception?s as $ thisException){

}

上面的代码抛出与消息“()提供的foreach无效参数”警告,因为$y_exceptions不是数组也不实现ArrayAccess,\Traversable或任何其它可迭代接口。

2. PDOException:拒绝SQLSTATEHY000连接

PDOExceptions代表PDO(PHP数据对象)引发的错误,正如PHP手册所描述的那样,它是“?用于访问PHP数据库的轻量级,一致的接口?”。

“PDOException:Connection refused”的可能根本原因可能是以下之一:

  • 您没有足够的权限来访问数据库或以该用户身份执行该操作。
  • 您的数据库参数(服务器名称?主机名和/或端口号,用户名,密码,数据库名称)不正确。
  • 您拥有数据库的服务器无法访问 – 它可能处于脱机状态。

3.错误使用empty函数

一些PHP开发人员喜欢用empty()函数去对变量或表达式做布尔判断,但在某些情况下会让人很困惑。

首先我们来看看PHP中的数组Array和数组对象ArrayObject。看上去好像没什么区别,都是一样的。真的这样吗?

// PHP 5.0 or later:

$array=[];

var_dump(empty($array));// outputs bool(true)

$array=newArrayObject();

var_dump(empty($array));// outputs bool(false)

// why don't these both produce the same output?

让事情变得更复杂些,看看下面的代码:

// Prior to PHP 5.0:

$array=[];

var_dump(empty($array));// outputs bool(false)

$array=newArrayObject();

var_dump(empty($array));// outputs bool(false)

很不幸的是,上面这种方法很受欢迎。例如,在Zend Framework 2中,Zend\Db\TableGateway 在 TableGateway::select() 结果集上调用 current() 方法返回数据集时就是这么干的。开发人员很容易就会踩到这个坑。

为了避免这些问题,检查一个数组是否为空最后的办法是用 count() 函数

文章来源:https://blog.csdn.net/qinshi501/article/details/135278922
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。