无法将php变量保存到mysql数据库或文件中

时间:2015-09-18 10:26:04

标签: 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,serialize保存,结果是:保存空变量数据。

我使用的是PHP 5.4最后一个版本,我认为这是配置问题,因为我的代码可以很好地使用其他两个服务器和我的localhost。

3 个答案:

答案 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"}