цикл для вставки строки в базу данных mysql с php - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть цикл for с php, но он не работает должным образом.Внутри цикла for у меня есть «if» и «else», но цикл останавливает итерацию в первом «else» и должен продолжаться.Вот код:

//counting the rows in database and the rows I want to insert

$total = count($rowToInsert); //for example 10 values
$totalDB = count($rowDB); // for example 5 values

// the for loop starts

for ($i=0; $i < $total; $i++){ //it should iterate until 10 values

  if(isset($rowDB[$i])){ //change the first 5 values

   $update = "UPDATE table SET name = '$name[$i]' WHERE ID = $rowToInsert[$i]";
   $result = mysqli_query($con, $update);

  } else { //it should iterate from sixth until tenth value

   $insert = "INSERT INTO table (name) VALUES ('$name[$i]')";
   $result = mysqli_query($con, $insert);

  // here is the next code

  $newTable = 'table'.$rowToInsert[$i];

  $newDB = "CREATE DATABASE $newTable CHARACTER SET utf8 COLLATE utf8_general_ci";
  $resultDB = mysqli_query($con, $newDB);

  // select the DB

  mysqli_select_db($con, $newTable) or die ("not found");

  } //end of else

} //end of for

Дело в том, что если база данных содержит 5 строк, и я хочу вставить, например, 10 строк, код работает, обновляя первые 5 с новым значением, затем он переходитв "else" и начинает перебирать шестое значение, и это работает, но следующие значения не делают.

Есть идеи, что я делаю неправильно?Спасибо!

Гектор

1 Ответ

0 голосов
/ 28 ноября 2018

Хорошо, я нашел проблему.В цикле else, когда итерация пытается выбрать базу данных, по какой-то причине она берет часть имени последней итерации, поэтому она не может найти базу данных.Решение (может быть, не очень чистое) заключается в подключении и закрытии соединения с базой данных на каждой итерации.Код остается таким:

//counting the rows in database and the rows I want to insert

$total = count($rowToInsert); //for example 10 values
$totalDB = count($rowDB); // for example 5 values

// the for loop starts

for ($i=0; $i < $total; $i++){ //it should iterate until 10 values

  if(isset($rowDB[$i])){ //change the first 5 values

   $update = "UPDATE table SET name = '$name[$i]' WHERE ID = $rowToInsert[$i]";
   $result = mysqli_query($con, $update);

  } else { //it should iterate from sixth until tenth value

   // reconnect to db

   $con = mysqli_connect($host, $user, $pass) or die ("unable to connect");
   $db = "database";

   $insert = "INSERT INTO table (name) VALUES ('$name[$i]')";
   $result = mysqli_query($con, $insert);

  // here is the next code

  $newTable = 'table'.$rowToInsert[$i];

  $newDB = "CREATE DATABASE $newTable CHARACTER SET utf8 COLLATE utf8_general_ci";
  $resultDB = mysqli_query($con, $newDB);

  // select the DB

  mysqli_select_db($con, $newTable) or die ("not found");

  //close the connection to db;

  $con->close();

  } //end of else

} //end of for

Спасибо вам всем за вдохновляющий ответ!

Гектор

...