如何将整个数组添加到数据库中的一个字段

问题描述 投票:0回答:3

我已经尝试了所有方法,array_push、多维数组等等,但没有任何效果。

以下情况:

try {
    if (isset($_SESSION['list']) > 0) {
    foreach($_SESSION['list'] as $id=> $quantity) {
            $sQuery = "SELECT * FROM table WHERE id = '".$id."' ";

        $oStmt = $db->prepare($sQuery); 
        $oStmt->execute();

        while($aRow = $oStmt->fetch(PDO::FETCH_ASSOC)) {
            $id = $aRow['id'];
        $name = $aRow['name'];
        $volume = $aRow['volume'];
                    }
        $testar = array(array('name' => $name, 'volume' => $volume, 'quantity' => $quantity));

        $sQuery = "INSERT INTO table (array_data, date) VALUES ('$testar', NOW())";
        $oStmt = $db->prepare($sQuery); 
        $oStmt->execute();

        print_r($testar);
        }
    }
    else {
        echo 'Nothing to add';
    }
    }

    catch(PDOException $e) { 
        $sMsg = '<p> 
    Regelnummer: '.$e->getLine().'<br /> 
    Bestand: '.$e->getFile().'<br /> 
    Foutmelding: '.$e->getMessage().' 
    </p>'; 
    trigger_error($sMsg); 
    }

当我 print_r($testar); 时我明白了:

Array ( [0] => Array ( [name] => test 1 [volume] => 1.50 [quantity] => 4 ) ) Array ( [0] => Array ( [name] => test 2 [volume] => 2.50 [quantity] => 5 ) ) Array ( [0] => Array ( [name] => test 3 [volume] => 2.50 [quantity] => 2 ) )

但是当我将其添加到数据库时,我只看到:ARRAY。

这怎么可能?

我想要的是将整个数组添加到数据库中的一个字段。这可能吗?我该如何安排?

php sql arrays pdo
3个回答
2
投票

通常,SQL 数据库中的一列应该只有一个值,而不是数组。 如果有多个值,则应单独进行值,如果它们是一组完全不同类型的数据,则应作为单独的列;如果数组是同一类型的多个值,则应作为依赖表的多行上的单个列的数据。

这条规则来自第一范式

但是如果您确实需要将 PHP 数组存储在一行中,则可以使用 PHP 的 serialize() 函数将 PHP 数组转换为字符串。 这比 implode() 更好,因为 serialize() 保留哈希键、数组的数组等。

$testar = array(array('name' => $name, 'volume' => $volume, 'quantity' => $quantity));
$testar_serialized = serialize($testar);

$sQuery = "INSERT INTO table (array_data, date) VALUES (?, NOW())";
$oStmt = $db->prepare($sQuery); 
$oStmt->execute( array($testar_serialized) );

0
投票

我会开始研究 implode 函数。

您可以将数组中的所有元素添加到数据库中的字段中,以字符串表示。


0
投票

一些事情:

  • 您不会将数组插入到 SQL 表中;而是将数组插入到 SQL 表中。您插入它的值。
  • 您的 SQL 表的每个字段应该有一个“列”(例如
    name
    volume
    quantity
    ),并且将为外部数组中的每个条目获得一个“行”。
  • 您的 SQL 中不应该有变量引用。这称为“SQL 注入向量”,(由于意外或恶意)最终会给您带来严重破坏。

您应该在

INSERT
所在位置做的是:

  • 准备一次 SQL 语句:

    INSERT INTO 表(名称、体积、数量)VALUES (?,?,?);

    ?
    标记 SQL 驱动程序将放置您稍后指定的值的位置。 这告诉数据库准备好接受这种形式的(1 个或多个)插入,并且 显示数据库驱动程序(PDO、mysqli 等),稍后您可以将这些值放置在何处 致电
    execute

  • 对于数组中的每一行:

    • 使用值列表调用
      execute
      ,例如
      ->execute ($testar->[$i]->['name'], …
© www.soinside.com 2019 - 2024. All rights reserved.