Buenas miren hago una consulta (en local) para crear una tabla y añadir una fila. Pues si ejecuto la consulta en phpmyadmin funciona correctamente sin ningun problema, pero si la ejecuto desde php no me da ningun error pero no crea la tabla, la consulta la leo desde un fichero, alguien sabe de que puede ser?
$id_mysql = mysql_connect($serverbd, $userbd, $passbd);
mysql_select_db($namebd);
$sql_file = file('sql.txt');
$sql = "";
foreach ($sql_file as $linea)
$sql .= $linea;
$result = mysql_query($sql);
mysql_close($id_mysql);
la conexion con la db, no es persistente, mejor añade el link de conexion en la query:
mysql_query($sql, $id_mysql);
He añadido la conexion a la consulta pero no funciona continua ejecutandose (php) sin errores pero phpmayadmin no refleja nada de la consulta y deberia de crear una tabla nueva.
has comprobado que te cree bien el fichero? que no te meta caracteres raros ni nada?
El fichero lo creo yo con el bloc de notas, y al leerlo lo imprimo por pantalla para ver que como lo saca y no veo nada raro, anoser las comillas simples que escribo yo pueden que las interprete como acentos o comillas simples, es lo unico que se me ocurre, si fuera eso como lo podria solucionar?
y has copiado lo que tesale por pantalla en el phpmyadmin a ver si lo hace?
Lo acabo de probar y la salida que me da el print en la pantalla la pego como consulta sql en phpmyadmin y crea la tabla y añade una fila, encambio desde el php no lo hace.
Pero phpmyadmin te da el codigo listo en php no? (debajo del dodigo sql del resultado), tratate con eso?
Saludos.
Solo veo dos posibles errores, uno... las variables de datos para phpmyadmin... las que usas para la conexión y selección de la base de datos.
otro el bucle for asociativo... podrías explicar un poco que pretendes con el... si en el archivo sql.txt ya tienes las sentencias SQL (SELECT, INSERT, ALTER...) hechas. Por lo pronto modifica la linea de la query por esta:
$result = mysql_query($sql, $id_mysql) or die (mysql_error());
Y escribe el error que te aparece, quizas el php.ini del servidor que usas no imprima los errores.
Digo yo... y si pones el codigo a ver si vemos algún error??
<?php
$serverbd = $_POST['serverbd'];
$userbd = $_POST['userbd'];
$passbd = $_POST['passbd'];
$namebd = $_POST['namebd'];
if ($serverbd == '' and $userbd == '' and $passbd == '' and $namebd == ''){
echo '
Muestro un formulario
';
}
else{
$id_mysql = mysql_connect($serverbd, $userbd, $passbd);
if ($id_mysql == 0){
echo '
Muestro un error ya que la conexion a mysql no se ha realizado
';
}
mysql_select_db($namebd);
if (mysql_error() != ""){
echo '
Muestro un error diciendo que no existe tal base de datos
';
}
else{
$sql_file = file('sql.sql');
$sql = "";
// Con este bucle lo que pretendo es leer el fichero linea a linea
// y ir añadiendolo a la variable $sql asi es como si tuviera la
// la consulta en una sola linea
foreach ($sql_file as $linea)
$sql .= $linea;
print $sql;
$result = mysql_query($sql, $id_mysql);
mysql_close($id_mysql);
echo '
Muestro un mensaje diciendo que se ha ejecutado totdo correctamente
';
}
}
?>
Despues de ejecutar la consulta el phpmyadmin no me debuelve el codigo php osea que no esta esa opcion, he pegado el codigo aunque donde estan los echo va codigo html yo os lo resumo mostrando esos mensajes, errores si que me muestra el server porque hay veces que me he equivocado al teclear y la conexion me ha dado error y ha salido en la pantalla.
yo de ti no pasaria los datos de conexión por post, create un fichero y pillalas de ahi es más seguro. Y luego creo que te falla el foreach
$sql_file = file('sql.sql');
$sql = "";
foreach ($sql_file as $linea_num => $linea) $sql .= $linea; print $sql;
Prueba eso a ver que tal.
Si ya se lo del pasarlas por post lo que pasa que el archivo que tengo es un supuesto install.php que crea un fichero con toda la info sobre la bbdd.
He probado el foreach que me has escrito y sige sin funcionar, yo me estoy volviendo loco porque no veo donde esta el fallo, y seguro que sera una julipolez.
Otra cosa el archivo que tengo con todos los datos de la bbdd hay algun metodo para encriptarlo o protegirlo contra posibles curiosos?