Php 调用json_解码数组的键返回NULL
我很难理解为什么在某些情况下,在PDO中访问密钥的特定方式有效,而当我自己尝试时,却没有 比如说,Php 调用json_解码数组的键返回NULL,php,pdo,json,pdostatement,Php,Pdo,Json,Pdostatement,我很难理解为什么在某些情况下,在PDO中访问密钥的特定方式有效,而当我自己尝试时,却没有 比如说, $sth = $this->dbh->prepare("UPDATE eq_question SET ". $user->field ."=? WHERE questID=?"); 这个PDO使用$user->field访问了一个数组的键(它位于javascript对象中,然后在PHP中发布和解码),但是当我尝试模拟解码的数组并使用var\u dump($user->field
$sth = $this->dbh->prepare("UPDATE eq_question SET ". $user->field ."=? WHERE questID=?");
这个PDO使用$user->field
访问了一个数组的键(它位于javascript对象中,然后在PHP中发布和解码),但是当我尝试模拟解码的数组并使用var\u dump($user->field)
时,我将收到NULL
谁能告诉我为什么会这样
在下面的示例中,当我var\u dump($user)
时,我可以看到所有的键,但是当我var\u dump($user->field)
时,我只收到null
,因此,导致类的updateValue
失败
举例说明我的意思:
class User {
private $dbh;
public function __construct($host,$user,$pass,$db) {
$this->dbh = new PDO("mysql:host=".$host.";dbname=".$db,$user,$pass); }
public function updateValue($user){
$sth = $this->dbh->prepare("UPDATE eq_question SET ". $user->field ."=? WHERE questID=?");
$sth->execute(array($user->newvalue, $user->id));
}
$user = new stdClass;
echo " <br>|||SPACE||| BEFORE ASSIGN A OBJECT OT THE ARRAY- ";
$userParams = array('id' => 1, 'field' => 'questTitle', 'newvalue' => "Baaaaa");
var_dump($userParams);
$user = json_encode(array("user"=>$userParams));
echo " <br>|||SPACE||| BEFORE DECODE- ";
var_dump($user);
echo " <br>|||SPACE||| BEFORE DECODE of field- ";
var_dump($user->field);
$user = json_decode($user);
echo " <br>|||SPACE||| AFTER DECODE- ";
var_dump($user);
$userN=new User(...//info is hided by intention!);
$dump=$userN->updateValue($user);
echo " <br>|||SPACE||| PRINT----- ";
print($dump);
echo " <br>|||SPACE||| VAR_DUMP----- ";
var_dump($dump);
类用户{
私人单位$胸径;
公共函数_构造($host,$user,$pass,$db){
$this->dbh=new-PDO(“mysql:host=“.$host.”dbname=“.$db,$user,$pass);}
公共函数updateValue($user){
$sth=$this->dbh->prepare(“更新eq_问题集”。$user->field.=?WHERE questID=?”;
$sth->execute(数组($user->newvalue,$user->id));
}
$user=新的stdClass;
在为数组指定对象之前回显“
| | | | | | | |”-”;
$userParams=array('id'=>1,'field'=>'questTitle','newvalue'=>“baaaa”);
var_dump($userParams);
$user=json_encode(数组(“用户”=>$userParams));
解码前回显“
| | | | | | | | | | | |”空格-”;
var_dump($user);
在解码字段-”之前回显“
| | | | | | |”;
变量转储($user->field);
$user=json_decode($user);
解码后回显“
| | | | | | | |空格-”;
var_dump($user);
$userN=新用户(…//信息被意图隐藏!);
$dump=$userN->updateValue($user);
回声“
| | | | | | |打印------”;
打印($dump);
echo“
| | | | | | | | VAR|u DUMP------”;
var_dump($dump);
谢谢Unrelated:您使用的PDO是错误的。
$user->field
应该是占位符,而不是直接插入到查询字符串中。您的updateValue()方法不返回任何内容,那么当您查找不存在的返回值时,为什么希望得到除null以外的任何内容呢?是的,但您使用的是json-encode()。一旦对PHP数据结构进行编码,它就不再是一个数据结构。它是一个字符串,但您一直试图将该字符串用作对象。正如我所说的。您编码为json,然后将该json字符串用作对象。$foo=json\u encode($bar);echo$foo->baz
将永远无法工作,因为php字符串不是对象。那么,为什么您要通过json对所有内容进行往返?请阅读我的评论!您不能将json编码的字符串用作对象。它不是对象!