我的问题很简单:我的$ _SESSION是在运行了一小段代码之后,从一个数组转换为一个Object(并且也改变了值!)
看看它,转过来:
[_SESSION] => Array
(
[user] => Array
(
[id] => 2
)
)
到:
[_SESSION] => Array
(
[user] => stdClass Object
(
[id] => 1
)
)
中间执行的脚本是一个简单的PDO查询,使用$_SESSION['user']['id']
作为绑定参数。
强大的黄金帮助我!
编辑:这是我运行的PDO查询:
function get_relatives_by_id($list_ids){ // $list_ids has been sanitized
global $co;
$tr = $co->prepare("SELECT id FROM people WHERE id IN (". $list_ids .") AND id IN (
SELECT id_people1 FROM people_relationships WHERE id_people2=:id_connected_user
) ORDER BY id ASC");
$tr->bindParam(':id_connected_user', $_SESSION['user']['id'], PDO::PARAM_INT);
$tr->execute();
return $tr->fetchAll(PDO::FETCH_OBJ);
}
编辑2 :根据您的想法,我尝试检索第二列,看看$_SESSION
是否也会被修改,而且它是......
因此,使查询看起来像这样:SELECT id, email FROM..
使$_SESSION
看起来像:
[_SESSION] => Array
(
[user] => stdClass Object
(
[id] => 1,
[email] => lol@lol.lol
)
)
很奇怪,不是吗?
编辑3:我只是试图用Wamp运行我的项目..这里没问题,正如预期的那样,因为代码是正确的。所以我想我将不得不深入研究OVH的服务器配置,你将无法在这里帮助我。无论如何,我感谢参与这个问题的每个人!真的!
答案 0 :(得分:1)
你可以用
强制它成为数组$_SESSION['user'] = (array) 'yourdata';
答案 1 :(得分:1)
您可以尝试PDOStatement::bindValue
,因为看起来PDO会修改您传入BindParam的引用,即使它只能读取它。
bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
将PHP变量绑定到用于准备语句的SQL语句中的相应命名或问号占位符。与PDOStatement :: bindValue()不同,变量被绑定为引用,并且仅在调用PDOStatement :: execute()时进行计算。
大多数参数都是输入参数,即以只读方式用于构建查询的参数。一些驱动程序支持调用将数据作为输出参数返回的存储过程,还有一些驱动程序支持输入/输出参数,这些参数既发送数据又更新以接收数据。