2012-03-20 206 views
0

我将会话存储到MySQL数据库中。会话数据被序列化并存储到DB单元。将序列化对象存储到数据库的一部分

问题是:序列化对象只是部分进入数据库。 如果我回显查询字符串,请将其复制并粘贴到phpMyAdmin->数据库查询中,并将其填入数据库已满,因为它应该。 “echo mysql_error”显示没有错误。 编码不是原因,我已经严格声明。 这是我使用的代码片段。

$sql = "UPDATE sessions 
SET SESSION_ID='$id', ACCESS='$access', DATA='".stripslashes($data)."', USER_ID='$username' WHERE SESSION_ID = '$id'"; 
echo("<br>".$sql."<br>"); 
return mysql_query($sql, $_sess_db); 
echo mysql_error($_sess_db); 

我该如何解决?以及为什么当我复制粘贴到phpmyadmin时,同样的查询工作正常,但不能像通过mysql_query函数执行时那样工作?

+0

叫我假设序列化的数据是问题。你确定所有数据都是序列化的吗?并且反序列化成功了?我不认为这个问题来自MySQL。您是否尝试将会话保存在纯文件中?你有同样的问题吗? – 2012-03-20 12:21:57

+0

1.您可以发布echo'd字符串吗?这可能是导致这... 2. Mysql_error从未使用,因为你回来之前 – 2012-03-20 12:26:34

+0

当我回应查询所有数据序列化。我不反序列化它,我通过phpMyAdmin查看数据库并查看对象是否完整。使用相同对象的纯文件中的会话工作正常 – user1010936 2012-03-20 12:40:57

回答

1

不这样做 - 不动态创建更新语句。改为使用参数化查询(请参阅question and answers on sqlinjection)。我认为它与没有正确转义的数据(可以通过使用参数化查询来防止)有关。此外,我认为mysql_error()获取不是因为以前的

回报声明

0
$sql= 'UPDATE `sessions` 
SET `SESSION_ID`= "'.$id.'", 
`ACCESS`= "'.$access.'", 
`DATA`= \''.str_replace("'", "\'", $data).'\', 
`USER_ID`= "'.$username.'" 
WHERE `SESSION_ID`= "'.$id.'"'; 
相关问题