Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: electrodev en 15 Agosto 2014, 17:38 pm



Título: [PHP y MySQL] Problema con código
Publicado por: electrodev en 15 Agosto 2014, 17:38 pm
Buenos días, os escribo por que no dejo de tirarme de los pelos con este problema, supongo que será algún fallo tonto o simplemente que no lo hago de forma correcta.

Código
  1. echo "Copiando...";
  2.  
  3. $gid = '10';
  4.  
  5. $sql = 'SELECT * FROM my_table_1 WHERE id = "'.$gid.'"';
  6.  
  7. $db = mysql_pconnect('mi_ip','mi_user','mi_pass');
  8. mysql_select_db('mi_DB');
  9. $data = mysql_query($sql);
  10.  
  11. $res = mysql_fetch_array($data);
  12.  
  13. $sql = 'INSERT INTO my_table_2 (id,data1,data2) VALUES ("'.$res['id'].'","'.$res['data1'].'","'.$res['data2'].'")';
  14.  
  15.  

La estructura de las dos tablas son totalmente iguales y como verán lo único que hace es copiar la fila que retorna la 1º consulta SQL en la 2º Tabla. La primera linea donde esta el echo funciona y php no me tira ningún error, pero al explorar con phpmyadmin la 2º tabla no se introducen los datos.

Desconozco totalmente que esta mal o que estoy haciendo mal, ¿Alguien sabe a que se debe?, ¿Alguna otra manera de hacerlo?  :huh:

Un Saludo y Gracias de antemano



Título: Re: [PHP y MySQL] Problema con código
Publicado por: ::: Devil ::: en 15 Agosto 2014, 18:04 pm
update


Título: Re: [PHP y MySQL] Problema con código
Publicado por: electrodev en 15 Agosto 2014, 18:16 pm
??


Título: Re: [PHP y MySQL] Problema con código
Publicado por: MinusFour en 15 Agosto 2014, 20:46 pm
¿Como es tu tabla de SQL?

Código
  1. DESCRIBE my_table_1;

El comando lo corres desde tu base de datos en el phpmyadmin en la pestaña SQL o desde una conexion SQL habiendo selecionado la base de datos.

También puedes debuggear SQL con mysql_error().

Ej.

Código
  1. mysql_query("SELECT * FROM tabla") or die(mysql_error());


Título: Re: [PHP y MySQL] Problema con código
Publicado por: electrodev en 16 Agosto 2014, 16:27 pm
Gracias MinusFour, en cuanto tenga un momento lo pruebo a ver si saco mas datos de que falla.

Un Saludo y Gracias


Título: Re: [PHP y MySQL] Problema con código
Publicado por: spysecurityca en 16 Agosto 2014, 21:32 pm
Mi viejo es como dijeron arriba, intenta con un update, ya que son iguales le pasas el elemento en común a la otra tabla para que te haga un cambio.

Haces que el update sql se hasta efectivo al encontrar el elemento el común con la otra tabla por medio de un if.

No te hago el código porque estoy desde el móvil y es un poco fastidioso.


Título: Re: [PHP y MySQL] Problema con código
Publicado por: electrodev en 16 Agosto 2014, 22:48 pm
Ok muchiiiisimas gracias a todos, ya lo arregle.  ;-)

Si quereis ya podeis cerrar el hilo.


Título: Re: [PHP y MySQL] Problema con código
Publicado por: dRak0 en 16 Agosto 2014, 23:17 pm
Código:
echo "Copiando...";

Cuando no vayas a mostrar una variable usa comillas simples ''. Si usas comillas dobles PHP tambien analiza si existe una variable, afectando al rendimiento.


Título: Re: [PHP y MySQL] Problema con código
Publicado por: electrodev en 21 Agosto 2014, 23:58 pm
»®et2lib©«  Gracias por ese apunte, me lo guardo.
Muchas Gracias  ;D


Título: Re: [PHP y MySQL] Problema con código
Publicado por: WHK en 22 Agosto 2014, 18:12 pm
Prueba con:

Código
  1. <?php
  2. ...
  3. INSERT INTO tabla1
  4. SELECT
  5. NULL, -- Los ids no deberian compartirse a menos que sea muy necesario
  6. campo1,
  7. campo2
  8. FROM tabla1
  9. ');

Desde la misma query puedes insertar haciendo un select por debajo, esto vuelca directamente los datos de una tabla a otra seleccinando los campos que necesitas, de hecho desde el select puedes hacer un order by o un limit como gustes o joins, generalmente lo uso cuando debo llenar tablas para los cache. Si haces esto desde php no sabrás si tienes 1 dato o un millón y pasar un millón de registros a la memoria vía php podría ser fatal, en ves de eso deja que mysql se encargue de traspasar fila por fila sin dejar sin aliento a tu servidor.

Si quieres pasar un solo dato puedes usar un where y si quieres unir datos relacionados puedes usar group_concat:

Código
  1. INSERT IGNORE INTO usuarios_b
  2. SELECT
  3. id,
  4. nombre,
  5. correo,
  6. GROUP_CONCAT(telefonos SEPARATOR ", ") as telefonos
  7. LEFT JOIN telefonos ON (telefonos.usuario_id = usuarios_a.id)
  8. FROM usuarios_a
  9. WHERE usuarios_a.id = 157894
  10. GROUP BY usuarios_a.id
  11. ');

Digamos que usuarios_a tiene una tabla relacional con todos los telefonos del usuario, en la tabla usuarios_b tendrá los telefonos separados por coma en un solo campo desnormalizado vs usuarios_a que si estaba normalizado. El ignore es para que no arroje error si ya existía, si se quiere renovar se puede unir con un drop o un update en ves de insert. Puse left join en ves de inner join porque talves el usuario no tiene telefonos, en ese caso el campo queda nulo y la tabla usuarios_b debería tener el campo telefonos nullable y usuarios_b denbería llevar un foregin key relaiconado con el id de la tabla de usuarios_a con un on-update y on-delete en cascade para hacer joins mas rápidos con innodb.

Por favor intenten dejar de usar mysql_ y usen mysqli_ o el objeto mismo de mysqli ya que mysql_ se declaró obsoleto en las nuevas verisones de php5.