我已经尝试了所有方法,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。
这怎么可能?
我想要的是将整个数组添加到数据库中的一个字段。这可能吗?我该如何安排?
通常,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) );
我会开始研究 implode 函数。
您可以将数组中的所有元素添加到数据库中的字段中,以字符串表示。
一些事情:
name
、volume
、quantity
),并且将为外部数组中的每个条目获得一个“行”。您应该在
INSERT
所在位置做的是:
准备一次 SQL 语句:
INSERT INTO 表(名称、体积、数量)VALUES (?,?,?);
?
标记 SQL 驱动程序将放置您稍后指定的值的位置。
这告诉数据库准备好接受这种形式的(1 个或多个)插入,并且
显示数据库驱动程序(PDO、mysqli 等),稍后您可以将这些值放置在何处
致电execute
对于数组中的每一行:
execute
,例如->execute ($testar->[$i]->['name'], …