【问题标题】:Store Session Array in Database在数据库中存储会话数组
【发布时间】:2014-01-23 12:06:43
【问题描述】:

我有数组会话....

$_SESSION['Names'] = array (11,15,26);
$_SESSION['Location'] = array (35,42,10);

我想将它们存储在我的数据库中...

$que = "Insert into tblpeople (DateTimePosted, first, second, third) VALUES(now(),'$_SESSION['Names'][0], $_SESSION['Location'][0])','$_SESSION['Names'][1], $_SESSION['Location'][1])','$_SESSION['Names'][2], $_SESSION['Location'][2])')";
$exec = mysql_query($que);

保存后,我的数据库 (tblpeople) 显示以下值:

发布日期: 2014-01-03 16:23:02

第一: Array[0],Array[0]

秒: Array[1],Array[1]

第三个: Array[2],Array[2]

相反,我希望我的输出是......

发布日期: 2014-01-03 16:23:02

第一: 11,35

秒: 15,42

第三个: 26,10

怎么了?

【问题讨论】:

  • 在会话值结束时有额外的)
  • 怎么样?我不明白。
  • 您的表格似乎没有正确规范化;以数字命名的列是 sql 反模式的标志。
  • 你需要将变量用大括号括起来;即"...'{$_SESSION['Names'][0]}', ...".

标签: php mysql arrays


【解决方案1】:

要在字符串中展开多维数组,需要将它们用大括号括起来:

$que = "Insert into tblpeople (DateTimePosted, first, second, third)
        VALUES(now(),
               '{$_SESSION['Names'][0]}, {$_SESSION['Location'][0]}',
               '{$_SESSION['Names'][1]}, {$_SESSION['Location'][1]}',
               '{$_SESSION['Names'][2]}, {$_SESSION['Location'][2]}')";

值中还有一些额外的括号。

但是,这似乎是一种将数据存储到数据库中的非常奇怪的方式。为什么在每列中有两个用逗号分隔的值,而不是将每个值分成单独的列?为什么要将数组元素存储到不同的列中,而不是使用单独的表,每个值都在一行中?

【讨论】:

    【解决方案2】:

    使用这个功能

    $x=serialize($_SESSION['Names']);
    

    它返回一个你可以保存在任何地方的字符串

    这个函数反转它

    $_SESSION['Names']=unserialize($x);
    

    【讨论】:

    • 我应该将它存储为 $x[0] 而不是 $_SESSION['Names'][0]?是这个意思吗?
    • serialize/unserialize 存在漏洞,请参阅owasp.org/index.php/PHP_Object_Injectionjson_encode/json_decode 会是更好的选择。
    【解决方案3】:

    试试这个

    <?php
    session_start();
    $_SESSION['Names'] = array (11,15,26);
    $_SESSION['Location'] = array (35,42,10);
    
    
    $refNumbers = $_SESSION['Names'];
    $partIds = $_SESSION['Location'];
    
    
    
    $combined = array();
    
    foreach($refNumbers as $index => $refNumber) {
        if(!array_key_exists($index, $partIds)) {
            throw OutOfBoundsException();
        }
    
        $combined[] = array(
            'Names'  => $refNumber,
            'Location' => $partIds[$index]
        );
    }
    
    print_r($combined);
    
    $combine1 = implode(",",$combined[0]);
    $combine2 = implode(",",$combined[1]);
    $combine3 = implode(",",$combined[2]);
    
    
    
    $que = "insert into tblpeople (DateTimePosted, first, second, third) VALUES(now(),'$combine1','$combine2','$combine3')";
    //$exec = mysql_query($que);
    
    ?>
    

    【讨论】:

    • 您好,感谢您的回答。我已经解决了这个问题,但无论如何,请不要删除你的答案。这可能对一些可能会遇到这个问题的人有所帮助:)
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多