我有问题。我无法将我的阵列数据保存到数据库,我不知道为什么。 我尝试了一些版本:
VER1:
$data=$_SESSION['need_save_data'];
$sql = "INSERT INTO session_search_data (`user_id`,`data`,`date`) VALUES ('" . $_SESSION['web_page_user_data']['id'] . "'," . $db_handler->db->quote(json_encode($data)) . ",'" . time() . "')";
$db_handler->db->query($sql);
并保存数据库:[] 如果我回应我的查询,并在mysql控制台中运行它,它工作正常:
INSERT INTO session_search_data (`user_id`,`data`,`date`) VALUES ('8','{\"selected_manufacturer_id\":\"504\"}','1442571431')
我尝试保存数据库json_encode,结果类似,它保存空变量。
我也尝试保存到文件:
$data=$_SESSION['need_save_data'];
$filename = 'session_data/' . $_SESSION['web_page_user_data']['id'] . '.php';
$file = fopen($filename, "w");
fwrite($file, serialize($data));
我尝试用json_encode,var_export,serialize保存,结果是:保存空变量数据。
我使用的是PHP 5.4最后一个版本,我认为这是配置问题,因为我的代码可以很好地使用其他两个服务器和我的localhost。
答案 0 :(得分:0)
即使您正在调用$db_handler->db->quote
方法,它也只会为json编码数据添加引号。您还必须用引号包装数据:
$sql = "INSERT INTO session_search_data (`user_id`,`data`,`date`)
VALUES ('" . $_SESSION['web_page_user_data']['id'] . "','" . $db_handler->db->quote(json_encode($data)) . "','" . time() . "')";
如果这不是问题,请在尝试访问会话变量之前验证您是否正在启动会话:
<?php
session_start();
另外,请确保您在$_SESSION['need_save_data']
变量
答案 1 :(得分:0)
确保您在error_reporting(E_ALL)中运行,并确保查询成功执行(如果其PDO,使PDO在PDO :: ERRMODE-&gt; PDO :: ERRMODE_EXCEPTION中运行),并确保你的fwrite成功了,比如
if(strlen(serialize($data))!==fwrite($file, serialize($data) || !fflush($file)){
throw new Exception("failed to write data to disk!");
}
然后我确定问题会变得明显......也许你有一个完整的硬盘? :P
答案 2 :(得分:0)
那么为什么你在使用explode时尝试将json插入数据库?使用预准备语句来避免sql注入:
$uid = 8;
$data = $_SESSION['need_save_data']; // content: selected_manufacturer_id:504
$date = time();
$sql = "INSERT INTO `session_search_data` SET `user_id`=?, `data`=?, `date`=?";
if ($query = $dbcon->prepare($sql)) {
$query->bind_param('isi', $uid, $data, $date);
$query->execute();
$query->close();
}
所以要从数据库中检索数据并转换为json,你可以这样做:
$contents = explode(':', $data);
$transform = array();
$transform[$contents[0]] = $contents[1];
$to_json = json_encode($transform); // {"selected_manufacturer_id":"504"}