我已经尝试了所有东西,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。
这怎么可能?
我想要的是将整个数组添加到数据库中的一个字段。这可能吗?我该如何安排呢?
答案 0 :(得分:1)
通常,SQL数据库中的列应该只有一个值,而不是数组。如果您有多个值,则应单独定义值,如果它们是完全不同类型的数据集,则作为单独的列,或者如果数组是相同类型的多个值,则作为依赖表的多行上的单个列数据的。
此规则来自First Normal Form。
但是如果你真的需要在一行中存储一个PHP数组,你可以将PHP数组转换为一个带有PHP serialize()函数的字符串。这比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) );
答案 1 :(得分:0)
我会开始查看implode函数。
您可以将数组中的所有元素添加到数据库中的字段中,表示为字符串。
答案 2 :(得分:0)
一些事情:
name
,volume
,quantity
),将获得&#34;行&#34;对于外部数组中的每个条目。您INSERT
所在的位置应该是:
准备一次SQL语句:
INSERT INTO表(名称,数量,数量)VALUES(?,?,?);
SQL驱动程序将放置值的?
标记,稍后指定。
这告诉数据库准备接受(1个或多个)此表单中的插入,并且
显示数据库驱动程序(PDO,mysqli,...)以后将值放在何处
致电execute
对于数组中的每一行:
execute
,例如->execute ($testar->[$i]->['name'], …