好吧,我知道这里有类似的话题,其实很多,但他们都没有帮助我找出我的问题,它似乎让我离我越来越远目标。我已经尝试了implode,为每个循环等,但是我收到“查询是空的”,因为我传递了空数组,否则我得到一个语法错误。MySQL的问题插入多行插入语句
我正在使用mysqli准备好的语句,这里是我尝试过的,没有运气。非常难倒。基本上,我插入来自我已经建立了一个API,通过潜在的许多成分行:
API URL字符串
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);
}
现在不顾一切,也许我需要重新开始。有什么建议么?目前我收到的查询是空的错误...我需要做到这一点更好,更有效的方式,但我正在抓我的头!
EDIT(仍在进行中)
// 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因为item_id,是insertData []错了吗? Item_id只有一个值,而不是一个数组,但我是否需要将它作为数组的一部分呢? – jflay
是的,'insertData []'是错误的,因为它只包含3个项目,因为它不包含'item_id'。我会更新我的答案。 – Sean
我更新了我的问题,并且完全按照您的指示进行了操作,但现在我没有收到错误,并且仍然没有数据库表中的数据... = /实际上,item_id不是API字符串中的数组,它只能从另一个父表的insert语句在同一个PHP脚本中。我最终通过'$ item_id = $ mysqli-> insert_id;'定义了item_id变量'' – jflay