Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/07/2010, 14:03
Avatar de mayid
mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 2 meses
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