elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  error consulta a BBDD en PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: error consulta a BBDD en PHP  (Leído 6,157 veces)
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #10 en: 4 Febrero 2009, 15:52 pm »

No aguanto la tentacion de ayudar  :D

Mira chico, yo te recomendaria que hagas una llave foranea padre-hijo entre las 2 tablas que tienes y elimines o no usas la tabla relacion N:M.

Puedes alterar las 2 tablas para esta accion, primero asegurate que ambas esten en un motor que soporte transacciones , ya que MyIsam que es No transaccional no soporta llave foraneas... necesitas un motor transaccional obligado para esto.

Código
  1. ALTER TABLE JUGAD ENGINE = INNODB;
  2. ALTER TABLE EQUIP ENGINE = INNODB;
  3.  

Ya teniendo ambas tablas dentro de un motor transaccional (Esto no provocara ningun malestar a tus tablas calmado... lo unico que las tablas ocuparan un pelin mas de espacio en el disco pero no abusivo).

Ahora relacionamos ambas tablas usando sus indices.

Código
  1. ALTER TABLE EQUIP ADD FOREIGN KEY(IDE_E) REFERENCES JUGAD(IDE_J) ON DELETE CASCADE;
  2.  

Aca la tabla2 EQUIP es hija de la tabla1 JUGAD relacionadas ambas por sus indices.

Asi ya puedes hacer tus JOIN de 2 tablas relacionadas mediante una llave foranea, y te evitas la tarea que te mencione anteriormente mas el analisis de idear como no provocarte un producto cartesiano al utilizar 1 tabla tercera para relaciones  :xD

Un Saludo.


En línea

miguelangelss4

Desconectado Desconectado

Mensajes: 70



Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #11 en: 5 Febrero 2009, 11:50 am »

Corazon disculpame la imprudencia pero... sabes porque version de MySQL vamos ya??? por la 6.x alpha...

Y yo me pregunto, porque estas queriendo tu utilizar relacion de normalizacion muchos:muchos si ya existe metodos de relacion automatica con las llaves foreneas????
Pues el problema esque ahora mismo soy estudiante de informática y me tengo que conformar con lo que nos explican en clase... y tienen la idea (absurda para mi) de que tienen que explicarnos todas las versiones hasta llegar a la actual, y obligarnos a usarlas... y tengo que hacer las prácticas con lo que me van enseñando...

Por otra parte, me has resuelto tú solita más dudas de PHP que dos profesores juntos xD, muchas gracias.
¿Como puedo saber si mi BBDD (MySQL) acepta transacciones?  ¿Y cómo quedaría la consulta completa finalmente?
Muchisimas gracias, POR TODO ;)


En línea

miguelangelss4

Desconectado Desconectado

Mensajes: 70



Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #12 en: 6 Febrero 2009, 01:06 am »

A ver, tengo el siguiente código en lo que debería ser la penúltima versión de mi buscador:
Código:
		<?php
$nombre = $_POST["nom_jug"]; $posicion = $_POST["posicion"]; $apellido = $_POST["ape_jug"];
$edad = $_POST["eda_jug"]; $lado = $_POST["lado"];$pie = $_POST["pie"]; $equipo=$_POST["equipo"];

$server_link = mysql_connect("***", "***", "***");
$bd_selected = mysql_select_db("***", $server_link);
$sql="SELECT b.ide_equipo" .
" FROM jug a INNER JOIN jugequ b ON a.IDE_jugador=b.IDE_jugador".
" WHERE a.IDE_jugador = b.IDE_jugador";
$query=mysql_query($sql, $server_link) or die(mysql_error());
$sql="SELECT Nombre" .
" FROM equ".
" WHERE IDE_equipo = $query";
$equipo=mysql_query($sql, $server_link) or die(mysql_error());
$sqlbuscar="SELECT IDE_jugador, Nombre, Apellido, Posicion, Pie, Lado, Edad" .
      " FROM 1jugador" .
" WHERE Nombre like '%" . $nombre . "%' AND Apellido like '%" . $apellido . "%' AND Posicion like '%" . $posicion . "%' " .
" AND Pie like '%" . $pie . "%' AND Lado like '%" . $lado . "%' AND Edad like '%" . $edad . "%' ";
      $query = mysql_query($sqlbuscar) or die(mysql_error());
    while ($busqueda = mysql_fetch_array($query))
    {
$contador=1;
    echo('<tr class="fila"><td>' . $busqueda["Nombre"] . '</td>
<td>' . $busqueda["Apellido"] . '</td>
<td>' . $busqueda["Posicion"] . '</td>
<td>' . $busqueda["Lado"] . '</td>
<td>' . $busqueda["Edad"] . '</td>
<td>' . $busqueda["Pie"] . '</td>
<td>' . $equipo . '</td></tr>');
$contador=$contador + 1;
    }
?>
y me da el siguiente mensaje de error, y no sé lo que quiere decir ni lo que hay mal:
Citar
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #2' at line 1
¿Alguna idea para corregirlo?
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #13 en: 6 Febrero 2009, 01:36 am »

Hola respondiendo aqui .

Citar
¿Como puedo saber si mi BBDD (MySQL) acepta transacciones?  ¿Y cómo quedaría la consulta completa finalmente?

Pues simple, las transacciones de registros en una tabla son definidas por el motor de almacenamiento en la cual esta fue creada. MySQL tiene distintos motores de almacenamientos disponibles, ahora por defecto al menos en Linux MySQL se instala utilizando el motor No transaccional MyIsam como motor asignado por defecto al crear una tabla, pero tengo constancia que MySQL para Windows suele instalar utilizando por defecto el motor Transaccional InnoDB.

Ahora que es un motor transaccional y que es un motor no transaccional. Un motor no transaccional (En este caso me referire a Myisam) es aquel en el cual cualquier cambio de los registros dentro de una tabla (Ya sea Insertar, borrar, actualizar datos) son automaticamente aplicados asap! sin permitirte regresar atras o recuperar alguna data sin querer perdida... todo es aplicado instantaneamente.

Un motor de almacenamiento Transaccional (En este caso usare de ejemplo InnoDB) es aquel en el cual cualquier cambio de los registros dentro de una tabla (Ya sea insertar, actualizar, borrar datos) no son instantaneamente aplicados a la tabla... sino que la consulta se ingresa a los registros de la tabla pero se queda en memoria en espera de una peticion de parte del usuario ya sea COMMIT (Aplicar cambios) o ROLLBACK (Retroceder a como estaba anteriormente) suponte que se guarda un backup del registro que tenias anteriormente, y sin querer eliminas 20 registros con la sentencia DELETE .... si tus tablas estan en un motor Transaccional tipo InnoDB puedes seguido del error que cometiste con DELETE.. realizar un ROLLBACK y la tabla regresara al ultimo registro existente antes de la consulta DELETE que realizaste. Esta ventaja NO existe en motores No transaccionales (Puedes probar).

Para habilitar y desabilitar las transacciones en MySQL no basta con que digas que tu tabla es InnoDB tienes que activar la variable encargada de ello tambien :

mysql> set autocommit = 0;

con el autocommit desabilitado, podras sacarle ventaja a Rollback y Commit en tus tablas Transaccionales. La ventajas de las transacciones es esa... que puedes o aplicar los cambios o retroceder al ultimo registro disponible... pero OJO. Si haces esto :

mysql> delete from tabla1 where nombres = 'pepe';
20 rows delete...

mysql> select * from tabla1;
bla bla bla....

mysql> rollback;

No volveras a obtener el registro 'pepe' ya que Rollback retrocede al ultimo registro aplicado antes de la consulta SQL realizada... no se si me explico.

Para tener desactivado el autocommit por defecto siempre, modifica tu archivo my.ini (Si es Windows) o my.cnf *Si es Linux*  y agrega en alguna parte :

autocommit = 0;

Sobre tu error de MySQL y PHP no me aclaro pero... te doy un consejo, comenta todas las consultas SQL que tienes ahi excepto la primera y ve probando una por una comentando y descomentando... para enterarte cual de todas es la que esta dando problemas con la consulta y asi poder ayudarte mejor.

Por cierto ON y WHERE es lo mismo en el caso que lo estas aplicando... puedes obviar el WHERE.
En línea

miguelangelss4

Desconectado Desconectado

Mensajes: 70



Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #14 en: 6 Febrero 2009, 12:59 pm »

eh.... vale, lo del commit y el roll back ya me lo sabía, pero a mi profesor se le olvidó comentar que ESO era la transaccionabilidad.... aún así, gracias.
Pues nada, ahora me pondé con la consulta a ver si saco algo en claro. Supongo que en unas horas lo tendré resuelto, ya solo me falta eso y otra duda de cómo pasar variables entre dos páginas, pero eso creo que podré hacerlo solo... y casi prefiero seguir buscandome la ayuda yo mismo,si no consigo hacerlo ya preguntaré. Cuando arregle la consulta y aprenda a hacer lo de las variables, habré terminado el buscador =D.
Gracias a todos.
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #15 en: 6 Febrero 2009, 15:25 pm »

Tambien Agregate que cuando una tabla esta en un motor transaccional soporta 'llave foraneas' cosa que una tabla bajo un motor No transaccional solo soporta indices pero no soporta relacion padre-hijo 'llave foranea' con otra tabla  ;)

Recuerda las no transaccionales solo soportan indices, las transaccionales soportan indices y relacion padre-hijo o mejor dicho 'llaves foraneas'.
En línea

miguelangelss4

Desconectado Desconectado

Mensajes: 70



Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #16 en: 7 Febrero 2009, 11:35 am »

En ese caso, mi BBDD si tiene transacciones ya que muchas tablas usan llaves foraneas...

Por otra parte, la búsqueda ya me funciona!! =D la solución ha sido hacerlo todo en una query y no en varias como lo estaba intentando...

Código:
<?php
$nombre = $_POST["nom_jug"]; $posicion = $_POST["posicion"]; $apellido = $_POST["ape_jug"];
$edad = $_POST["eda_jug"]; $lado = $_POST["lado"];$pie = $_POST["pie"]; $equipo=$_POST["equipo"];

$server_link = mysql_connect("*****", "*****", "****");
$bd_selected = mysql_select_db("****", $server_link);
$sqlbuscar="SELECT a.IDE_jug, a.Nom, a.Ape, a.Pos, a.Pie, a.Lado, a.Edad, c.Nom nombre_equipo" .
      " FROM jug a INNER JOIN jugequ b on a.IDE_jug = b.IDE_jug " .
"                 INNER JOIN equ c on b.IDE_equ = c.IDE_equ " .
" WHERE a.Nome like '%" . $nombre . "%' AND a.Ape like '%" . $apellido . "%' AND a.Pos like '%" .
$posicion . "%' " . " AND a.Pie like '%" . $pie . "%' AND a.Lado like '%" . $lado . "%' AND a.Edad like '%" .
$edad . "%' ";
$query = mysql_query($sqlbuscar) or die(mysql_error());
    while ($busqueda = mysql_fetch_array($query))
    {
$contador=1;
$_SESSION["IDE_jugador'" .  $contador . "'"] = $busqueda["IDE_jugador"];
$_SESSION["contador"] = $contador;
echo $_SESSION["IDE_jugador'" .  $contador . "'"];
    echo('<tr class="fila"><td><a href=javascript:cargacelda("jugador.php");>' . $busqueda["Nom"] . '</a></td>
<td>' . $busqueda["Ape"] . '</td>
<td>' . $busqueda["Pos"] . '</td>
<td>' . $busqueda["Lado"] . '</td>
<td>' . $busqueda["Edad"] . '</td>
<td>' . $busqueda["Pie"] . '</td>
<td>' . $busqueda["nombre_equipo"] . '</td></tr>');
$contador++;
    }
?>
Sigo teniendo un problema con la variable de sesión, pero voy a ver si lo resuelvo ahora en un rato.. si no vuelvo por aquí xD
Gracias TiFa
En línea

coquito_navideño

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: error consulta a BBDD en PHP
« Respuesta #17 en: 14 Febrero 2009, 15:59 pm »

Ojo con las llaves foraneas y asimilar que la estas utilizando  ;)

Tu puedes perfectamente crear 2 tablas Myisam y colocar que 1 de las 2 haga un referencia *llave-foranea* a la otra.... MySQL no te dara ningun tipo de error ni nada te dira que todo se creo satisfactoriamente...

Pero, a la hora de aplicar o utilizar las ventajas de tener relaciones de este tipo notaras que curiosamente no se aplican  :-\ y diras pero porque esta basura no funciona  >:(  estoy eliminando o actualizando 2 registros de la tabla padre y en la tabla hijo no ocurre nada y todo sigue igual esta porqueria no sirve  >:(   >:(   >:(

Y mentira, MySQL si sirve, el problema que en motores No transaccionales no va a funcionar este tipo de relaciones... asi que mucho ojo con esto  ;)
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consulta SQL a BBDD de estadísticas de Fútbol o Baloncesto
Dudas Generales
chocola 0 1,540 Último mensaje 1 Mayo 2014, 14:36 pm
por chocola
Como crear consulta a BBDD de PhpAdmin
PHP
elman1989 4 2,433 Último mensaje 9 Noviembre 2014, 18:59 pm
por ivancea96
[DUDA] Error en ADO al poner un WHERE en la consulta
Programación Visual Basic
Psyke1 3 1,800 Último mensaje 4 Febrero 2015, 16:23 pm
por seba123neo
(Consulta)Error al unir 2 arreglos
Programación C/C++
palacio29 0 1,477 Último mensaje 29 Noviembre 2016, 15:56 pm
por palacio29
CONSULTA DE PRINCIPIANTE POR ERROR WIN32
GNU/Linux
mate23 1 2,699 Último mensaje 18 Febrero 2024, 19:12 pm
por TickTack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines