Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal tudo blzz
estou com um grande problema espero que uma alma me ajude com qualquer coisa .. srrs
estou tentando importa um arquivo com mais de mil linhas utilizando a sqlsrv
Infelizmente ele limita em mil registro para cada Insert
então preciso faze um loop a cada mil ele da um insert alguém com alguma dica de como começa esse loop
cod que estou utilizando
$usuarios = array();
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
// Início da consulta
$sql = "INSERT INTO usuarios (id, nome, email) VALUES";
// Para cada elemento de $usuários, faça:
foreach ($usuarios as $usuario) {
$nome = $usuario['nome'];
$email = $usuario['email'];
// Monta a parte consulta de cada usuário
$sql .= " (NULL, '{$nome}', '{$email}'),";
}
// Tira o último caractere (vírgula extra)
$sql = substr($sql, 0, -1);
// Executa a consulta
sqlsrv_query($sql);
esse e so um exemplo esse array pode te ate 10 mil registros
Help alguma dica !!!Usa o array_chunk... Pega todos os valores dos inserts que você vai fazer (as strings SQL dos inserts) coloque tudo em um array só. Você vai ter um array gigante de SQL's de insert, depois você usa o array_chunk (http://php.net/manual/pt_BR/function.array-chunk.php) para quebrar ele em pedaços de 1000 e itera por estes pedaços, por exemplo:
<?php
$a = [];
for($i=0;$i<=100;$i++) {
$a[] = $i;
}
$chunks = array_chunk($a, 10); //10 partes de 10 valores
print_r($chunks);
Isso vai te dar algo do tipo:
Array
(
[0] => Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 6
[7] => 7
[8] => 8
[9] => 9
)
[1] => Array
(
[0] => 10
[1] => 11
[2] => 12
[3] => 13
[4] => 14
[5] => 15
[6] => 16
[7] => 17
[8] => 18
[9] => 19
)
[2] => Array
(
[0] => 20
[1] => 21
[2] => 22
[3] => 23
[4] => 24
[5] => 25
[6] => 26
[7] => 27
[8] => 28
[9] => 29
)
[3] => Array
(
[0] => 30
[1] => 31
[2] => 32
[3] => 33
[4] => 34
[5] => 35
[6] => 36
[7] => 37
[8] => 38
[9] => 39
)
[4] => Array
(
[0] => 40
[1] => 41
[2] => 42
[3] => 43
[4] => 44
[5] => 45
[6] => 46
[7] => 47
[8] => 48
[9] => 49
)
[5] => Array
(
[0] => 50
[1] => 51
[2] => 52
[3] => 53
[4] => 54
[5] => 55
[6] => 56
[7] => 57
[8] => 58
[9] => 59
)
[6] => Array
(
[0] => 60
[1] => 61
[2] => 62
[3] => 63
[4] => 64
[5] => 65
[6] => 66
[7] => 67
[8] => 68
[9] => 69
)
[7] => Array
(
[0] => 70
[1] => 71
[2] => 72
[3] => 73
[4] => 74
[5] => 75
[6] => 76
[7] => 77
[8] => 78
[9] => 79
)
[8] => Array
(
[0] => 80
[1] => 81
[2] => 82
[3] => 83
[4] => 84
[5] => 85
[6] => 86
[7] => 87
[8] => 88
[9] => 89
)
[9] => Array
(
[0] => 90
[1] => 91
[2] => 92
[3] => 93
[4] => 94
[5] => 95
[6] => 96
[7] => 97
[8] => 98
[9] => 99
)
[10] => Array
(
[0] => 100
)
)
Depois é só iterar:
<?
$a = [];
for($i=0;$i<=100;$i++) {
$a[] = "SQLInsert".$i;
}
$chunks = array_chunk($a, 10); //10 partes de 10 valores
print_r($chunks);
foreach($chunks as $chunk) {
foreach($chunk as $sql) {
echo $sql, PHP_EOL;
}
}
Veja o Repl: [https://repl.it/G00g/0](https://repl.it/G00g/0)Valeu Lucas pelo Help e quase isso
>
13 horas atrás, Clayderson disse:
O código está simples, acho que dispensa comentários.
Altere o valor de $limit caso deseje alterar o limite de registros por query. Eu deixei como 1000 porque é o que pede seu tópico, porém eu acho muito. Eu colocaria 100 registros de cada vez pra não floodar tanto o banco de dados e criaria alguma coisa que me permitisse acompanhar os registros sendo inseridos pra me certificar de que nada de errado aconteceu.
<?php
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
$sql = "INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES";
$values = [];
$indice = 0;
$qntidade = 0;
$limit = 1000;
foreach ($usuarios as $usuario) {
if ($qntidade < $limit) {
$qntidade++;
} else {
$qntidade = 1;
$indice++;
}
$str = " (NULL, '{$usuario['nome']}', '{$usuario['email']}'),";
$values[$indice] = (isset($values[$indice])) ? "{$values[$indice]}{$str}" : $str;
}
foreach ($values as $str) {
$query = substr("{$sql}{$str}", 0, -1);
sqlsrv_query($query);
}
Valeuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
Muitoooooooooooooooooooooooooooooooooooooooooooo
era exatamente isso..................
>
3 horas atrás, KhaosDoctor disse:
Usa o array_chunk... Pega todos os valores dos inserts que você vai fazer (as strings SQL dos inserts) coloque tudo em um array só. Você vai ter um array gigante de SQL's de insert, depois você usa o array_chunk (http://php.net/manual/pt_BR/function.array-chunk.php) para quebrar ele em pedaços de 1000 e itera por estes pedaços, por exemplo:
<?php
$a = [];
for($i=0;$i<=100;$i++) {
$a[] = $i;
}
$chunks = array_chunk($a, 10); //10 partes de 10 valores
print_r($chunks);
Isso vai te dar algo do tipo:
Array
(
[0] => Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 6
[7] => 7
[8] => 8
[9] => 9
)
[1] => Array
(
[0] => 10
[1] => 11
[2] => 12
[3] => 13
[4] => 14
[5] => 15
[6] => 16
[7] => 17
[8] => 18
[9] => 19
)
[2] => Array
(
[0] => 20
[1] => 21
[2] => 22
[3] => 23
[4] => 24
[5] => 25
[6] => 26
[7] => 27
[8] => 28
[9] => 29
)
[3] => Array
(
[0] => 30
[1] => 31
[2] => 32
[3] => 33
[4] => 34
[5] => 35
[6] => 36
[7] => 37
[8] => 38
[9] => 39
)
[4] => Array
(
[0] => 40
[1] => 41
[2] => 42
[3] => 43
[4] => 44
[5] => 45
[6] => 46
[7] => 47
[8] => 48
[9] => 49
)
[5] => Array
(
[0] => 50
[1] => 51
[2] => 52
[3] => 53
[4] => 54
[5] => 55
[6] => 56
[7] => 57
[8] => 58
[9] => 59
)
[6] => Array
(
[0] => 60
[1] => 61
[2] => 62
[3] => 63
[4] => 64
[5] => 65
[6] => 66
[7] => 67
[8] => 68
[9] => 69
)
[7] => Array
(
[0] => 70
[1] => 71
[2] => 72
[3] => 73
[4] => 74
[5] => 75
[6] => 76
[7] => 77
[8] => 78
[9] => 79
)
[8] => Array
(
[0] => 80
[1] => 81
[2] => 82
[3] => 83
[4] => 84
[5] => 85
[6] => 86
[7] => 87
[8] => 88
[9] => 89
)
[9] => Array
(
[0] => 90
[1] => 91
[2] => 92
[3] => 93
[4] => 94
[5] => 95
[6] => 96
[7] => 97
[8] => 98
[9] => 99
)
[10] => Array
(
[0] => 100
)
)
Depois é só iterar:
<?
$a = [];
for($i=0;$i<=100;$i++) {
$a[] = "SQLInsert".$i;
}
$chunks = array_chunk($a, 10); //10 partes de 10 valores
print_r($chunks);
foreach($chunks as $chunk) {
foreach($chunk as $sql) {
echo $sql, PHP_EOL;
}
}
Veja o Repl: [https://repl.it/G00g/0](https://repl.it/G00g/0)
Valeu Lucas pela colaboração....
O código está simples, acho que dispensa comentários.
Altere o valor de $limit caso deseje alterar o limite de registros por query. Eu deixei como 1000 porque é o que pede seu tópico, porém eu acho muito. Eu colocaria 100 registros de cada vez pra não floodar tanto o banco de dados e criaria alguma coisa que me permitisse acompanhar os registros sendo inseridos pra me certificar de que nada de errado aconteceu.