Foros del Web » Programando para Internet » PHP »

mysqli para instalar una base de datos.

Estas en el tema de mysqli para instalar una base de datos. en el foro de PHP en Foros del Web. Tengo un problema con mysqli. La idea es que instale una base de datos completa, pero no lo hace. Y no me lanza un error. ...
  #1 (permalink)  
Antiguo 04/07/2010, 14:03
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Tengo un problema con mysqli. La idea es que instale una base de datos completa, pero no lo hace. Y no me lanza un error. Quisiera obtener ese error.

La forma que estoy usando es la del manual (donde dice "Estilo por procesos"):

http://php.net/manual/es/mysqli.multi-query.php

Digamos que no paso de esta linea: if(mysqli_multi_query($installDataBase, $backupSource)){

La cuestion está en la base de datos seguro. La exporto con un script. Y no la puedo instalar con ese otro script. Pero si le quito algunas consultas entonces si la puedo intalar, así que el problema aparentemente está en la exportación.

Este es mi escript para exportar:

Código PHP:
    // directory
    
$directory "downloads/";
    
    
// conection
    
include "conection.php";
    
    
//get all of the tables
    
if($tables == '*')
    {
        
$tables = array();
        
$result mysql_query('SHOW TABLES');
        while(
$row mysql_fetch_row($result))
        {
            
$tables[] = $row[0];
        }
    }
    else
    {
        
$tables is_array($tables) ? $tables explode(',',$tables);
    }
    
$return "";
    
//cycle through
    
foreach($tables as $table)
    {
                
        
$return.= 'DROP TABLE IF EXISTS '.$table.';';
        
$row2 mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
        
$return.= "\n\n".$row2[1].";\n\n";
        
        
$result mysql_query('SELECT * FROM '.$table);
        
$num_fields mysql_num_fields($result);
        for (
$i 0$i $num_fields$i++)
        {
        
            while(
$row mysql_fetch_row($result))
            {
                
$return.= 'INSERT INTO '.$table.' VALUES(';
                for(
$j=0$j<$num_fields$j++) 
                {
                    
$row[$j] = addslashes($row[$j]);
                    
$row[$j] = ereg_replace("\n","\\n",$row[$j]);
                    if (isset(
$row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                    if (
$j<($num_fields-1)) { $return.= ','; }
                }
                
$return.= ");\n";
            }
        }
        
$return.="\n\n\n";
    }
    
    
//save file
    
$file 'aoiManual-backup-'.date("Y-m-d").'.sql'//.'-'.(md5(implode(',',$tables)))
    
$handle fopen($directory.$file,'w+');
    
fwrite($handle,$return);
    
fclose($handle); 
Ok. El problema está en los caracteres alemanes. Como tendría que codificarlos a la hora de hacer el backup? El script solo agrega slashes.

El problema estará en las comillas?. Creo que sí. Pero si no es eso, es por los caracteres alemanes.

Como sea, usando phpmyadmin importa bien. Que puedo hacer para que desde PHP tambien pueda insertar todos los datos?

Última edición por GatorV; 04/07/2010 a las 23:06
  #2 (permalink)  
Antiguo 05/07/2010, 16:13
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: mysqli para instalar una base de datos.

Ayer recorté el archivo .sql hasta encontrar al menos una de las partes problematicas. Luego, fui quitando texto a esa seccion hasta encontrar el problema. Y para mi sorpresa el problema no es ni de comillas ni de utf8 ni de caracteres extranjeros, sino de espacios en blanco. Borrando ciertos espacios en blanco, mysqli funciona. Por que? Es muy raro.

Vuelvo a decir que la importación desde phpmyadmin funciona. Lo que no funciona es mi script para importar:

Cita:
function installDB() {

include "conection.php";

$installDataBase = mysqli_connect($dbhost, $dbusuario, $dbpassword, $db);

if (!$installDataBase) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
};

$backupSource = file_get_contents('installDataBase.sql');

if(mysqli_multi_query($installDataBase, $backupSource)){
do {
echo "doing";
/* store first result set */
if ($result = mysqli_store_result($installDataBase)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($installDataBase)) {
printf(".");
}
} while (mysqli_next_result($installDataBase));

$response = "<h3>Tables successfully created. </h3>";

/* close connection */
mysqli_close($installDataBase);
} else $response = "<h3>Error: </h3>".mysql_error();

return $response;
}
Esta sacada del manual. Y anda solo si recorto un poco mi archivo .sql

Etiquetas: mysqli
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:44.