在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |