好吧,我知道這裏有類似的話題,其實很多,但他們都沒有幫助我找出我的問題,它似乎讓我離我越來越遠目標。我已經嘗試了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