Скопируйте таблицу 1 sql в другую с некоторыми дополнительными данными

0

У меня есть этот код:

<?php
//MYSQL
$dbserver="..."; //adresa MySQL
$dblogin="...";       //jméno uživatele MySQL
$dbheslo="...";     //heslo MySQL
$dbnazev="...";      //název databáze MySQL
$mysqli = new mysqli($dbserver, $dblogin, $dbheslo, $dbnazev); 
if ($mysqli->connect_error) {
    die('Nepodařilo se připojit k MySQL serveru (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
$mysqli->query("SET NAMES 'utf8'"); // nastavíme kódování MySQL



while($row = $mysqli->query("SELECT * FROM 'importovat_fyz' WHERE 'tempid' IS NOT NULL")->fetch_assoc()){

$tempid = $row['tempid'];
$jmeno = $row['jmeno'];
$prijmeni = $row['prijmeni'];


$email = $row['email'];
$bydliste = $row['bydliste'];

$souhlas = "on";
$aktuality = "on";

$timestamp = time();
$hash = md5("77c0a83besxxxcg1a190ab90d".time().$tempid.rand(10000000, 99999999));

$poznamky = "import19052018";

$vloz ="INSERT into 'potvrzenotest' set jmeno='".$jmeno."', prijmeni='".$prijmeni."', bydliste='".$bydliste."', email='".$email."', souhlas='".$souhlas."', aktuality='".$aktuality."', timestamp='".$timestamp."', hash='".$hash."', poznamky='".$poznamky."';";
$result=$mysqli->query($vloz);


$cas = date('H:i');
echo '['.$cas.'] ID '.$tempid.' imported.', PHP_EOL;
}

mysqli_close($mysqli); .
?>

У меня есть одна таблица с некоторыми данными, и я должен скопировать ее в другую таблицу с некоторыми дополнительными данными (например, хэш и т.д.).

Когда я запускаю код выше, я получил следующее:

[17:17] ID 1 imported.
[17:17] ID 1 imported.
[17:17] ID 1 imported.
[17:17] ID 1 imported.
[17:17] ID 1 imported.

Таким образом, копируется только 1 строка.

Не могли бы вы помочь мне, где проблема?

  • 1
    У вас есть бесконечный цикл.
  • 0
    Взгляните на dev.mysql.com/doc/refman/8.0/en/insert-select.html для более простого способа сделать это с помощью одной команды
Показать ещё 7 комментариев
Теги:
mysqli

1 ответ

2
Лучший ответ
while($row = $mysqli->query("SELECT * FROM 'importovat_fyz' WHERE 'tempid' IS NOT NULL")->fetch_assoc()){ ... }

Этот цикл никогда не закончится. И он будет извлекать первую строку снова и снова.

Вы должны выполнить запрос вне цикла:

$selectResult = $mysqli->query("SELECT * FROM 'importovat_fyz' WHERE 'tempid' IS NOT NULL");

while ($row = $selectResult->fetch_assoc()) { ... }

В качестве примечания: подумайте о том, чтобы использовать подготовленный оператор для инструкции INSERT в цикле. Это предотвратит ошибки синтаксиса SQL, если некоторые из значений могут создавать специальные символы типа '. Если вы запускаете их в одной транзакции, вы можете даже повысить производительность.

  • 0
    Благодарю. Но есть ошибка. php script_import.php [12:29] ID 1 imported. PHP Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in script_import.php:17 Stack trace: #0 {main} thrown in script_import.php on line 17
  • 0
    @OndrejSimer Измените имя переменной $result в моем коде на другое. Например, $selectResult . Ошибка возникает из-за того, что вы используете ту же переменную для оператора вставки в цикле.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню