2015-09-18 49 views
1

我遇到问题。我无法将我的数组数据保存到数据库,我不知道为什么。 我尝试一些版本:无法将php变量保存到mysql数据库或文件

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,序列化,其结果是:节省空可变数据。

我使用PHP 5.4的最后一个版本,我认为这是配置问题,因为我的代码能正常工作,其他两台服务器和我的本地主机。

+0

的var_dump($ _ SESSION [ 'need_save_data']);看看你是否有东西要保存。 –

+1

“data”表的大小/长度是多少? – NaijaProgrammer

+2

你在调用'$ db_handler-> db-> query($ sql)之后没有检查错误;'这样做,它会告诉你什么是错误 – RiggsFolly

回答

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']变量

+0

我访问会话数据,变种转储结果有用: 阵列(1){ [ “selected_manufacturer_id”] => 串(3)“我试过保存到文件,而不是在这个工作 – Josef

+0

用引号括起数据:''“。$ db_handler-> db-> quote(json_encode($ data))。” “' –

0

一些数据,确保你在使用error_reporting(E_ALL)运行,并确保成功执行的查询(如果它的PDO,使PDO在PDO运行:: ERRMODE-> PDO: :ERRMODE_EXCEPTION),并确保你的fwrit e成功了,就像

if(strlen(serialize($data))!==fwrite($file, serialize($data) || !fflush($file)){ 
throw new Exception("failed to write data to disk!"); 
} 

然后确定问题会变得明显......也许你有一个完整的硬盘? :p

0

那么为什么你试图插入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"}