Pergunta

Eu tenho um arquivo sqldump.sql que funciona muito bem quando o aplico usando o recurso de importação do phpmyadmin, no entanto, preciso conseguir realizá -lo programaticamente. Sendo um noob, tentei fazer algo assim:

$SQL=file_get_contents('SqlDump.sql');
$DB=mysqli_connect('localhost','root','');
mysqli_select_db($DB,'somedb');
if (mysqli_multi_query($DB, $SQL)) {
    do {
        if ($result = mysqli_store_result($DB)) {
            mysqli_free_result($result);
        }
    } while (mysqli_next_result($DB));
}
$Err=mysqli_error($DB);
mysqli_close($DB);

Mas eu recebo todos os tipos de erros do MySQL. No entanto, o mesmo arquivo funciona bem quando eu o importo usando phpmyadmin. Como faço para que isso funcione programaticamente?

Erro:

Can't create table 'somedb.t_sr_u_alertcode' (errno: 150)
Foi útil?

Solução

Você tem duplo-maldito.

Esse erro é um erro de restrição de chave estrangeira. Alguma tabela que você está tentando criar provavelmente tem uma chave estrangeira para outra tabela que ainda não foi criada.

Encontrei alguns casos do erro aqui:

pesquisando no Google:

O segundo problema é que você provavelmente terá problemas para tentar importar um arquivo grande, porque não acho que você possa executar vários comandos SQL separados com um; Como você pode em phpmyadmin. Eu sugiro usar um script como este:

Eu não experimentei, mas não tenho motivos para acreditar que não funciona.

Outras dicas

Você sempre poderia apenas Olhe para o código -fonte

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top