gpt4 book ai didi

php - MySQL 使用一条插入语句插入多行时出现问题

转载 作者:行者123 更新时间:2023-11-29 06:40:47 26 4
gpt4 key购买 nike

好吧,我知道在这方面有类似的话题,事实上有很多,但没有一个能帮助我弄清楚我的问题,它似乎只会让我离我的目标越来越远。我已经尝试过 implode、for each、循环等,但要么我收到“查询为空”,因为我传递的是空数组,要么我收到语法错误。

我正在使用 mysqli 准备好的语句,这是我尝试过但没有成功的方法。非常难过。基本上,我可能会插入从我构建的 API 传递的许多成分行:

API 网址字符串

menu_item.php?ingredient_name[]=bacon&ingredient_price[]=1.00&ingredient_default[]=0&ingredient_name[]=cheese&ingredient_price[]=0&ingredient_default[]=1

PHP

// set arrays, item_id, foreign key, already set from previous query
$ingredient_name = $_GET['ingredient_name'];
$ingredient_price = $_GET['ingredient_price'];
$ingredient_default = $_GET['ingredient_default'];
// define arrays
$ingredients = array(
'ingredient_name' => $ingredient_name,
'ingredient_price' => $ingredient_price,
'ingredient_default' => $ingredient_default
);
$insertQuery = array();
$insertData = array();
// set array length
$len = count($ingredients);
/**
prepare the array values for mysql
**/
// prepare values to insert recursively
$ingQuery = "INSERT INTO TABLE (column1,column2,column3,column4) VALUES ";
// set placeholders
foreach ($ingredients as $row) {
$insertQuery[] = '(?,?,?,?)';
}
// iterate through all available data
for( $i=0;$i<$len;$i++ ) {
$insertData[] = $ingredients['ingredient_name'][$i];
$insertData[] = $ingredients['ingredient_price'][$i];
$insertData[] = $ingredients['ingredient_default'][$i];
}
// set ingredient value placeholders
$ingQuery .= implode(', ', $insertQuery);
// prepare statement ingredients
$ingStmt = $mysqli->prepare($sql);
// run the query
if( $ingStmt ) {
$ingStmt->execute($insertData);
} else {
// handle error return
echo json_encode(array('error' => $mysqli->error.__LINE__));
echo json_encode($insertData);
}

现在忽略所有可能我需要重新开始的事情。有什么建议么?目前我收到 Query Was Empty 错误...我需要以更好、更有效的方式执行此操作,但我正在为此摸不着头脑!

编辑(仍在进行中)

// the query
$ingQuery = "INSERT INTO table (column1,column2,column3,column4) VALUES (?,?,?,?)";
// prepare statement
$ingStmt = $mysqli->prepare($ingQuery);
if( $ingStmt ) {
// iterate through all available data
for( $i=0;$i<count($_GET['ingredient_name']);$i++ ) {
$ingStmt->execute(array($item_id,$_GET['ingredient_name'][$i],$_GET['ingredient_price'][$i],$_GET['ingredient_default'][$i]));
}
} else {
echo json_encode(array('error' => $mysqli->error.__LINE__));
}
$ingStmt->close();

最佳答案

首先,您的查询中有 4 列 - (column1,column2,column3,column4) VALUES (?,?,?,?),但您只插入了 3 个值 $_GET['ingredient_name'], $_GET['ingredient_price'], $_GET['ingredient_default']

其次,除非您需要重用数组/变量,否则为什么不将其简化为在循环中准备和执行 -

// the query
$ingQuery = "INSERT INTO TABLE (column1,column2,column3) VALUES (?,?,?)";
// prepare statement
$ingStmt = $mysqli->prepare($ingQuery);
// iterate through all available data
for( $i=0;$i<count($_GET['ingredient_name']);$i++ ) {
$ingStmt->execute(array($_GET['ingredient_name'][$i], $_GET['ingredient_price'][$i], $_GET['ingredient_default'][$i]));
}

更新
使用 mysqli 时需要使用 bind_param() -

// the query
$ingQuery = "INSERT INTO TABLE (column1,column2,column3,column4) VALUES (?,?,?,?)";
// prepare statement
$ingStmt = $mysqli->prepare($ingQuery);
$ingStmt->bind_param("isss", $item_id, $val1, $val2, $val3);
// iterate through all available data
for( $i=0;$i<count($_GET['ingredient_name']);$i++ ) {
$val1 = $_GET['ingredient_name'][$i];
$val2 = $_GET['ingredient_price'][$i];
$val3 = $_GET['ingredient_default'][$i];
$ingStmt->execute();
}

关于php - MySQL 使用一条插入语句插入多行时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com