【问题标题】:serialized object stores to database partially部分序列化对象存储到数据库
【发布时间】:2012-03-20 12:17:35
【问题描述】:

我将会话存储到 MySQL 数据库中。会话数据被序列化并存储到 DB 单元中。

问题如下:序列化对象只是部分进入数据库。 如果我回显查询字符串,请将其复制并粘贴到 phpMyAdmin->database 查询中,它应该会进入完整的数据库。 “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 函数执行时却不能正常工作?

【问题讨论】:

  • 我认为序列化数据是问题所在。您确定所有数据都已序列化吗?并成功反序列化?我不认为问题来自 MySQL。您是否尝试将会话保存在纯文件中?你有同样的问题吗?
  • 1.您可以发布回显字符串吗?这可能是造成这种情况的原因...... 2. Mysql_error 从未使用过,因为您之前返回
  • 当我回显查询时,所有数据都被序列化。我不反序列化它,我通过 phpMyAdmin 查看数据库并查看对象是否完整。具有相同对象的普通文件中的会话工作正常
  • 我无法发布超过邮件大小限制的字符串。但查询是正确的,因为当我复制粘贴并手动提交时它工作正常。

标签: php sql database object


【解决方案1】:

不要那样做——不要动态创建更新语句。请改用参数化查询(请参阅question and answers on sqlinjection)。我认为它与未正确转义的数据有关(可以通过使用参数化查询来防止)。另外我假设 mysql_error() 没有被调用,因为之前的

返回声明

【讨论】:

    【解决方案2】:
    $sql= 'UPDATE `sessions` 
    SET `SESSION_ID`= "'.$id.'", 
    `ACCESS`= "'.$access.'", 
    `DATA`= \''.str_replace("'", "\'", $data).'\', 
    `USER_ID`= "'.$username.'" 
    WHERE `SESSION_ID`= "'.$id.'"';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多