Foros del Web » Programando para Internet » PHP »

Problema con php y consulta mysql

Estas en el tema de Problema con php y consulta mysql en el foro de PHP en Foros del Web. Que tal, tengo un problema con una consulta. Resulta que tengo una tabla llamada productos, tiene como campos : prod_id(bigint)(primary key) prod_nombre(varchar) prod_url_prod(varchar) prod_url_imag(varchar) prod_descripcion(varchar) ...
  #1 (permalink)  
Antiguo 02/09/2009, 14:04
 
Fecha de Ingreso: enero-2008
Mensajes: 125
Antigüedad: 16 años, 3 meses
Puntos: 0
Problema con php y consulta mysql

Que tal, tengo un problema con una consulta. Resulta que tengo una tabla llamada productos, tiene como campos :
prod_id(bigint)(primary key)
prod_nombre(varchar)
prod_url_prod(varchar)
prod_url_imag(varchar)
prod_descripcion(varchar)
prod_precio(float)

pero cuando hago la consulta en mi código no actualiza la base de datos. El código es el siguiente:

Código PHP:
<?php

include "conector.php";

include 
"simplexml.class.php";
?> 
<table>
<tr><td>
<?php
$nomArch
=$_FILES['archivo']['name'];
$file "archivos/export1.xml";
$sxml = new simplexml;
$data $sxml->xml_load_file($file,$resulttype="object");
foreach(
$data->product as $producto)
{
$nombre=$producto->name;
$urlProd=$producto->productUrl;
$urlImag=$producto->imageUrl;
$descripcion=$producto->description;
$precio=$producto->price;
$id=$producto->TDProductId;
//me conecto a la base de datos
$conexion=conectar();
//me fijo si existe el producto chequeando con el id
 
$resul mysql_query('select prod_id from productos where prod_id='+$id) or die (mysql_error());  
//si el numero de filas devuelto es igual a 0 hago un insert into
if(($a=mysql_num_rows($resul))==0)
{
mysql_query("insert into productos (prod_id,prod_nombre,prod_url_prod,prod_url_imag,prod_descripcion,prod_precio)
      values ("
.$id.",'"+$nombre+"','"+$urlProd+"','"+$urlImag+"','"+$descripcion+"',"+(string)$precio+")");

}
}

//cierro la conexión
mysql_close($conexion);
?>
Los valores de las variables antes de hacer la consulta estan bien, ya que imprimí su resultado por pantalla, puse un echo en la parte del if que corresponde al cumplimiento de la condición y pasa por ahí. El tema es que no me agrega las filas a la base, también verifiqué que se esté conectando a la base correcta ya que imprimí el nombre de las tablas y los campos de la base y efectivamente se imprimió la tabla productos, así que estoy conectado. Alguien sabe si tengo un error de sintaxis en las consultas??. Saludos
  #2 (permalink)  
Antiguo 02/09/2009, 14:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con php y consulta mysql

Estas tratando de concatenar con mas (+) pero en php se concatena con punto (.)

Código php:
Ver original
  1. mysql_query("insert into productos (prod_id,prod_nombre,prod_url_prod,prod_url_imag,prod_descripcion,prod_precio)
  2.      values (".$id.",'"+$nombre+"','"+$urlProd+"','"+$urlImag+"','"+$descripcion+"',"+(string)$precio+")");
  3.  
  4. $cadena = 'texto' . $variable . 'mas texto' .  'bla bla bla';
  5.  
  6. // Podrias simplificar con:
  7. mysql_query("insert into productos (prod_id,prod_nombre,prod_url_prod,prod_url_imag,prod_descripcion,prod_precio)
  8.      values ($id, '$nombre', '$urlProd', '$urlImag', '$descripcion', $precio)");

Las variables que estan dentro de una cadena encerrada entre comillas dobles, seran interpretadas y reemplazadas por sus respectivos valores. No necesitas convertir $precio a string, en todo caso, si asi lo deseas, solo encierralo entre comillas simples dentro de la consulta y eso sera suficiente.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 02/09/2009, 14:45
 
Fecha de Ingreso: enero-2008
Mensajes: 125
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Problema con php y consulta mysql

Muchas gracias. Una cosa, tengo que cargar unos archivos xml, con archivos chicos me carga todas las filas a la base de datos, pero con los grandes me carga algunos y deja de cargar en un punto, no tira error....

Última edición por juanf03; 02/09/2009 a las 14:57
  #4 (permalink)  
Antiguo 02/09/2009, 15:00
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con php y consulta mysql

Seguramente esta es tu linea 20:

$nomArch=$_FILES['archivo']['name'];

- Tal vez no definiste correctamente el <input type="file" name="archivo" /> en tu formulario.
- Tal vez en las propiedades del formulario falta enctype="multipart/form-data" para permitir el envio de archivos.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 02/09/2009, 15:54
 
Fecha de Ingreso: enero-2008
Mensajes: 125
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Problema con php y consulta mysql

Sisi, eso esta correcto, el nombre del archivo llega correctamente, y los valores de las variables son los que tienen que ser ya que los imprimí por pantalla. De hecho empieza a cargar los registros, pero por ejemplo un archivo xml de 6700 hoteles carga 1000 nomas(lo vi en phpmyadmin y había 1000 filas nada mas), no se porque, pero se corta antes y no tira ningún error ademas, le agregué el set_time_limit para que no haya problema con el tiempo de ejecución del script, pero el problema persiste.

Código PHP:
<?php
set_time_limit
(999999999);
header('Content-Type: text/html; charset=UTF-8');
$nomArch=$_FILES['archivo']['name'];
$file $nomArch;
$sxml = new simplexml;
$data $sxml->xml_load_file($file,$resulttype="object");
//me conecto a la base de datos
$conexion=conectar();
foreach(
$data->product as $producto)
{
$nombre=$producto->name;
$urlProd=$producto->productUrl;
$urlImag=$producto->imageUrl;
$descripcion=$producto->description;
$precio=$producto->price;
$id=$producto->TDProductId;
//me fijo si existe el producto chequeando con el id
 
$resul mysql_query('select prod_id from productos where prod_id='.$id) or die (mysql_error());  
//si el numero de filas devuelto es igual a 0 hago un insert into
if(($a=mysql_num_rows($resul))==0)
{

mysql_query("insert into productos (prod_id,prod_nombre,prod_url_prod,prod_url_imag,prod_descripcion,prod_precio,prod_fecha_ing)

     values ($id, '$nombre', '$urlProd', '$urlImag', '$descripcion', $precio,NOW())"
);
}
}
//cierro la conexión
mysql_close($conexion);
?>
No se cual es el error, no hay productos duplicados en el archivo encima :S.....con los archivos chicos parece no haber problemas, pero los grandes no los carga en la base en su totalidad....sobre todo un xml de 65 mb, alguna solución a esto?. Por ahi es un problema de tiempo limite sobrepasado del script, pero le puse set_time_limit, aunque no se si funcionó...

Última edición por juanf03; 02/09/2009 a las 16:08
  #6 (permalink)  
Antiguo 02/09/2009, 18:53
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con php y consulta mysql

Posibles causas del problema:

- Tiempo de ejecucion
- Tamaño del archivo a subir (max_file_size y post_max_size)
- Etiqueta html: <input type="hidden" name="MAX_FILE_SIZE" value="100mb" />
- Algun otro error que tal vez podrias ver en $_FILES['archivo']['error']
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 02/09/2009, 19:27
 
Fecha de Ingreso: enero-2008
Mensajes: 125
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Problema con php y consulta mysql

tengo un error ahora, le puse or die() para que me informe los errores y carga varios registros y aparece el error:

Algo est� equivocado en su sintax cerca '|49.92,NOW())' en la linea 2

me olvidé de mencionar que el xml esta en una codificación ISO 8859-1 pero yo estaba tratando todo en UTF-8, puede ser esto un problema al tratar de meter en la base???....
  #8 (permalink)  
Antiguo 02/09/2009, 21:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con php y consulta mysql

Convierte cada cadena a utf con uf8_encode() y despues pasala por mysql_real_escape_string()
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 03/09/2009, 01:45
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Problema con php y consulta mysql

El PHP no es se conecta con (+), se conecta con (.), pero de todas formas puedes hacer una consilta sql sin tenter que conctar las variables con puntos, quedande de esta manera:

mysql_query("insert into productos (prod_id,prod_nombre,prod_url_prod,prod_url_imag,p rod_descripcion,prod_precio)
values ('$id','$nombre','$urlProd','$urlImag','$descripci on','(string)$precio')");
  #10 (permalink)  
Antiguo 03/09/2009, 14:00
 
Fecha de Ingreso: enero-2008
Mensajes: 125
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Problema con php y consulta mysql

Se solucionó, puntos para los que aportaron algo(aunque el problema era otro, pero vale la intención), saludos
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 23:18.