php - 使用序列化数组进行查询,搜索字段中的值

标签 php mysql arrays serialization

我了解到这不是一个好的选择,但我没有任何其他方法可以做到这一点。

我使用 cakephp 及其数据库 session 。 session 的所有数据都存储为序列化数组,如下所示:

Config|a:3:{s:9:"userAgent";s:32:"c25774da215a84965aadcfd075489db8";s:4:"time";i:1331594676;s:7:"timeout";i:10;}Message|a:0:{}Auth|a:1:{s:7:"Usuario";a:20:{s:10:"id_usuario";s:4:"6658";s:6:"nombre";s:6:"Master";s:8:"apellido";s:4:"User";s:5:"login";s:11:"master-user";s:16:"fecha_nacimiento";s:10:"1998-08-03";s:14:"fecha_registro";s:10:"0000-00-00";s:13:"hora_registro";s:8:"00:00:00";s:4:"pais";s:1:"7";s:9:"provincia";s:2:"CA";s:6:"cuidad";s:5:"dfdff";s:13:"codigo_postal";s:6:"123456";s:6:"ctpais";s:0:"";s:8:"ctcuidad";s:0:"";s:8:"telefono";s:8:"23324234";s:5:"grupo";s:1:"3";s:6:"activo";s:1:"1";s:11:"id_campania";s:3:"999";s:9:"sessiones";s:1:"1";s:10:"admin_camp";s:1:"0";s:6:"codigo";N;}}

当用户登录时,我需要检查他是否已经有一个 session 正在进行,因此我需要执行一个查询,搜索该序列化数组中的字段 login 的值以检索包含该值的记录(如果存在)。

我怎样才能做到这一点?

最佳答案

将用户登录信息存储在单独的列中,例如

CREATE TABLE  `session` (
    `session_id` VARCHAR( 50 ) NOT NULL ,
    `user_login` VARCHAR ( 50 ) NOT NULL,
    `session_serialized` TEXT NOT NULL ,
    PRIMARY KEY (  `session_id` )
);

您现在可以使用 WHERE user_login = ? 搜索 session 。

如果您不能或不想接触 session 表,您还可以创建第二个表来存储哪个用户正在使用哪个 session_id。假设您希望用户不要有多个 session :

CREATE TABLE  `user_session` (
    `session_id` VARCHAR( 50 ) NOT NULL ,
    `user_login` VARCHAR ( 50 ) NOT NULL,
    PRIMARY KEY (  `user_login` )
);

我不建议通过序列化 session 数组进行搜索。

关于php - 使用序列化数组进行查询,搜索字段中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9674524/

相关文章:

PHP & MySQL - 在标题和副标题下列出查询结果

mysql - 单表和多表语法的区别?

mysql - 如何合并 mysql 中的这些列还是应该使用另一个连接?

java - .split ("|"中的运行时错误)

c - 如何打印大小未知的int数组

php - 使用 ATK4 导入不同格式的供应商数据的 Controller

php - 减少 Mysql 查询和 OOP

php - Laravel 模块用于更新联属网站中的价格、库存和评论

MYSQL select 有很大疑问!

每个循环的 Javascript 只显示最后一个对象