加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PDOStatement :: bindParam中绑定重载属性时的PHP注意事项

发布时间:2020-12-13 17:18:15 所属栏目:PHP教程 来源:网络整理
导读:当我尝试在PDOStatement :: bindParam方法中绑定重载属性时, $stmt-bindParam(':'.$field.'',$this-$field,$pdoparam);...public function __get($param) { if(isset($this-$param)) return $this-$param; } 我收到通知 Notice: Indirect modification of ov
当我尝试在PDOStatement :: bindParam方法中绑定重载属性时,

$stmt->bindParam(':'.$field.'',$this->$field,$pdoparam);
...

public function __get($param)
    {
        if(isset($this->$param))
            return $this->$param;
    }

我收到通知

Notice: Indirect modification of overloaded property Msgs::$posttime has no effect in ...

经过一些研究,我发现了一个关于php.net上类似problem的错误报告.建议的解决方案是添加一个&在__get定义之前.

&__get(...

但是,当我尝试这样做时,我得到另一个通知

Notice: Only variable references should be returned by reference in ...

PHP版本是5.3.8.

有没有解决这个问题的方法?

解决方法

PDOStatement :: bindParam需要引用并可能修改传递给它的参数(将其转换为最合适的类型,或者如果它是OUT / INOUT参数则将结果写入它).

PDOStatement :: bindValue不接受引用,也不修改参数.

__get返回$this-> $param的值,但实际上并不使它成为对$this-> $param的引用,并且引用返回的值会产生此通知.它不是PDO特有的,即使是简单的$x =& $this-> $param会触发相同的通知.使用bindValue而不是bindParam来避免这种情况.

关于非引用__get的更多解释:https://stackoverflow.com/a/5337433/1233508

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读