2016-02-29 1 views
2

Я хочу создать инструкцию insert mysql в цикле for. I'm looking for to insert multiple records at a time.php INSERT data to sql in for loop

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
$label =htmlspecialchars($_POST["label"]); 
$splitLabel = explode(" ", $label);//split the label to a array 
} 
//.....insert another data, getting the $last_id here 

$sql = $result = ""; 
for ($i =0; $i< count($splitLabel); $i++){ 
    if ($i < count($splitLabel)){ 
     $sql .= "INSERT INTO label (item_id, label) 
     VALUES ('".$last_id."', '".$splitLabel[$i]."');"; 
    }else{ 
     $sql .= "INSERT INTO label (item_id, label) 
     VALUES ('".$last_id."', '".$splitLabel[$i]."')"; 
    } 
} 
$result = mysqli_query($conn, $sql); 

я получил ошибку о

check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO label (item_id, label) 
    VALUES ('13', 'tin');INSERT INTO label (' at line 2 

этикетку Tabel:

Field  Type   null 
item_id int(11)   NO 
label  varchar(50)  NO 

я не могу найти ошибку, пожалуйста, помогите мне найти его ..

+0

таблица меток не имеет «PRIMARY KEY» –

+4

mysqli_query() выполняет оператор _one_. Но, например, 'INSERT ...; INSERT ...; '- два утверждения. см. http://docs.php.net/manual/en/mysqli.quickstart.multiple-statement.php | Но почему именно вам нужно несколько операторов, особенно. когда все они попали в один стол? – VolkerK

+3

Используйте [mysqli_multi_query] (http://php.net/manual/en/mysqli.multi-query.php), чтобы выполнить несколько запросов. – Saty

ответ

2

Для многократного выполнения запросов можно использовать mysqli_multi_query()

Для мульти вставки в таблицу с одним запросом, как это multi insert: -

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 

Таким образом, вы можете попробовать, как

$sqlInsert = ''; 
$countOfData = count($splitLabel); 
for ($i = 0; $i < $countOfData; $i++){ 
    $sqlInsert .= "('{$last_id}', '{$splitLabel[$i]}'),"; 
} 
$sqlInsert = rtrim($sqlInsert, ',');//remove the extra comma 
if ($sqlInsert) { 
    $sql = "INSERT INTO label (item_id, label) VALUES {$sqlInsert} ;"; 
    $result = mysqli_query($conn, $sql); 
} 
+0

сделано ~ большое спасибо ~ –

0
$sql .= "INSERT INTO label (item_id, label) 
    VALUES ('".$last_id."', '".$splitLabel[$i]."');"; 

Вы пропустили ";"

+0

Извините, кто-то сказал, удалите ";". ... но ты сказал, что я пропустил один. Кто прав? –

+0

Попробуйте «;», тогда вы узнаете. –

+1

@kingyau всегда заканчивает ваши заявления; - это синтаксический разделитель, нет другого пути ... не забывайте, что вы соединяете несколько строк с циклом. попробуйте повторить ваш $ sql перед выполнением, чтобы увидеть, что именно происходит в процессе запроса.Кстати, как и другие предложили, используйте mysqli_multi_query() для выполнения подобных запросов или рассмотрите использование PDO-> query (ведьма разрешает многозадачные запросы), а также вам не нужно несколько запросов при вставке в одну и ту же таблицу; вы можете вставить тысячи строк в одну таблицу только с одной командой INSERT (см. документацию). – Wh1T3h4Ck5

1

Попробуйте этот код

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
$label =htmlspecialchars($_POST["label"]); 
$splitLabel = explode(" ", $label);//split the label to a array 
} 
//.....insert another data, getting the $last_id here 

$sql = $result = ""; 
for ($i =0; $i< count($splitLabel); $i++){ 
if ($i < count($splitLabel)){ 
    $sql .= "INSERT INTO label (item_id, label) VALUES ('$last_id', '$splitLabel[$i]')"; 
}else{ 
    $sql .= "INSERT INTO label (item_id, label) 
    VALUES ('$last_id', '$splitLabel[$i]')"; 
} 
} 
-1

Попробуйте это.

$sql = $result = "INSERT INTO label (item_id, label) VALUES "; 
    for ($i =0; $i< count($splitLabel); $i++){  
     $sql .= "('".$last_id."', '".$splitLabel[$i]."')"; 
     if ($i < count($splitLabel) - 1){ 
      sql .= ","; 
     } 
    } 
+2

Он хочет вставить несколько значений в момент времени – Kailas

+0

Я обновил свой ответ. пожалуйста, посмотри. @king yau – JanLeeYu

+0

он использует mysqli. можете ли вы подготовить образец для mysqli multi insert. так что вы получите + ve голосовать. – Kailas

4

mysqli_query() выполняет только одно утверждение, но вы отправляете несколько операторов. Вы can использование mysqli_multi_query(), но ....

лучше использовать prepared statement + parameters для этого.
Что-то вроде например

if (isset($_POST["label"])) { 
    $stmt = $conn->prepare('INSERT INTO label (item_id, label) VALUES (?,?)') 
    if (!$stmt) { 
     someErrorHandler($conn->error); 
    } 
    else if (!$stmt->bind_param('ss', $last_id, $label)) { 
     someErrorHandler($stmt->error); 
    } 
    else { 
     // I have no idea where this $last_id comes from .... 
     foreach(explode(' ', $_POST["label"]) as $label) { 
      if (!$stmt->execute()) { 
       someErrorHandler($stmt->error); 
      } 
     } 
    } 
} 
2

Вам просто нужно использовать mysqli_multi_query() для нескольких запросов.

$sql = ""; 
$result = ""; 

for ($i =0; $i< count($splitLabel); $i++){ 
    if ($i < count($splitLabel)){ 
     $sql .= " INSERT INTO label (item_id, label) 
     VALUES ('".$last_id."', '".$splitLabel[$i]."');"; 
    }else{ 
     $sql .= " INSERT INTO label (item_id, label) 
     VALUES ('".$last_id."', '".$splitLabel[$i]."');"; 
    } 
} 
$result = mysqli_multi_query($conn, $sql); 

Вы не можете использовать несколько INSERT в одном mysqli_query для этого действия, вы можете использовать mysqli_multi_query() для выполнения нескольких запросов.