我想将数组分成两个不同的列。 并将这两个分隔列的条目作为2列表格(ID,Name) 对于特定ID,我有多个名称。
($output)
(
[0] => 109 ABC
[1] => 110 CDEEE
[2] => 109 EFGHI
[3] => 111 PIJFJJF
)
上面是我的阵列。我如何进入数据库。
请帮忙。
我到目前为止尝试使用爆炸功能。 explode(' ,' , $output)
但我得到的结果不同
答案 0 :(得分:5)
您正在寻找的SQL模式是一对多的关系。它可以使用一个表将多个名称映射到一个id:
Names
---------
Name VARCHAR(255) NOT NULL (Primary Key)
Id INT NOT NULL (Index)
您可以使用以下内容创建此表:
CREATE TABLE Names(
Name VARCHAR(255) NOT NULL,
Id INT NOT NULL,
PRIMARY KEY(`Name`),
INDEX `Id_idx` (`Id`)
);
然后,您可以使用以下命令将每个id的每个名称插入到数据库中:
INSERT INTO Names (Name, Id) VALUES('ABC', 109);
使用PDO prepared queries即可:
$stmt = $dhb->prepare('INSERT INTO Names (Name, Id) VALUES(:name, :id)');
foreach($names as $nameStr) {
list($id, $name) = explode(' ', $nameStr); // split "109 ABC" into id: 109 and name: ABC
$stmt->execute(array(
':id' => $id,
':name' => $name
));
}
要检索索引的所有名称,您可以使用此PDO查询:
$id = 123;
$names = array();
$stmt = $dbh->prepare('SELECT Name FROM Names WHERE Id = :id');
$stmt->execute(array(':id' => $id));
while(($newName = $stmt->fetchColumn(0)) !== false) {
$names[] = $newName;
}
答案 1 :(得分:1)
在数组中使用foreach循环,如
$sql = "INSERT INTO my_table (ID,Name) VALUES";
$i = 0;
$my_id = "your id";
$my_cnt = count($my_array);
foreach($my_array as $name) {
$exploded = explode(' ',$name);
$sql .= "($exploded[0],$exploded[1])";
if($i++ < $my_cnt)
$sql .= " , ";
}
echo $sql;
然后执行查询$ sql