Php 调用json_解码数组的键返回NULL

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

我很难理解为什么在某些情况下,在PDO中访问密钥的特定方式有效,而当我自己尝试时,却没有

比如说,

$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编码的字符串用作对象。它不是对象!