我有一个循环foreach
,我执行查询。我有一个关联array
,关键是列的名称。如果ID不是AUTO_INCREMENT
,则只会执行第一个请求true
,而所有其他请求false
。如果在db中放置AUTO_INCREMENT
,则会执行所有查询,但是以级联方式执行。
$namePhones = ["phone_1", "phone_2", "phone_3", "phone_4", "phone_5"];
$jsonPhones = $userInfo;
$jsonPhones = array_splice($jsonPhones, 0, 1);
$phones = new stdClass();
$phonesCount = count($jsonPhones[0]);
foreach ($jsonPhones[0] as $key => $value) {
if($key < $phonesCount){
$phones->{$namePhones[$key]} = $jsonPhones[0][$key];
} else { return; }
}
$phonesDB = json_decode(json_encode($phones), true);
//$phonesDB//this is array
// Array
// (
// [phone_1] => 1
// [phone_2] => 2
// [phone_3] => 3
// [phone_4] => 4
//)
foreach ($phonesDB as $key => $value) {
$queryInsertPhones =
"INSERT INTO
`phones_users` ($key)
VALUES ($value)";
$resultPhones = mysqli_query($con, $queryInsertPhones);
}
cascade style.
+--------------------------------+
|id | phone_1 | phone_2 | phone_3|
|---+---------+---------+--------|
|1 | 1 | --- | --- |
|---+---------+---------+--------|
|2 | --- | 2 | --- |
|---+---------+---------+--------|
|3 | --- | --- | 3 |
+---+----------------------------+
I want this.
+--------------------------------+
|id | phone_1 | phone_2 | phone_3|
|---+---------+---------+--------|
|1 | 1 | 2 | 3 |
|---+---------+---------+--------|
|2 | --- | --- | --- |
+---+----------------------------+
答案 0 :(得分:4)
原因是您执行每个键的查询而不是所有键。
您需要这样做:
// Make a variables that will conaints all keys and values seprate by comma
$keyList = '';
$keyValue = '';
// Add key and value to their variable with comma
foreach ($phonesDB as $key => $value) {
$keyList .= '`'.$key.'`,';
$keyValue .= '\''.$value.'\',';
}
// Remove the last comma
$keyList = substr($keyList, 0, -1);
$keyValue = substr($keyValue, 0, -1);
// Build the SQL query
$queryInsertPhones =
"INSERT INTO
`phones_users` ($keyList)
VALUES ($keyValue)";
// Execute the query
$resultPhones = mysqli_query($con, $queryInsertPhones);
如果您想要多个插入,我猜这段代码在主循环中。
答案 1 :(得分:0)
我很难确切地看到你在做什么,但通常在插入SQL数据库时,你应该指定一个where子句来根据主键指定要插入的行为那一行。如果您尝试将数据添加到已插入的行,则应使用update而不是insert。
最简单的解决方案是使用嵌套循环。内部循环应该通过一行并获取该行的所有电话号码,然后一次插入所有值。你的外部循环应遍历所有行。