php y mysql error

soanix

Buenas a tod@s,

Estoy creando un modulo para el cms prestashop.

Todo funciona correctamente, excepto a la hora de hacer la ultima consulta.

Un simple INSERT en una tabla.

La funcion donde se produce el error es esta:

	
public function actualizar($producto, $cantidad, $porcentaje)
	{
		mysql_query("INSERT * INTO "._DB_NAME_."."._DB_PREFIX_."discount_quantity 
			(id_discount_type, id_product, quantity, value)
			VALUES 
			('1', '".$producto."', '".$cantidad."', '".$porcentaje."'") 
			or die 
			($producto.", ".$cantidad.", ".$porcentaje); /*devuelve una comprovación
para saber si existen datos*/

/*Todo esto es una consulta que va dentro de un bucle while (mysql_fetch_array($lectura)) {
$this->actualizar($lectura['id_product'], $_POST['cantidad'], $_POST['porcentaje']);
}*/


}

A ver si alguien sabe porque me falla esta consulta tan simple.

PD: Es un fallo de NOOBS... FACE PALM!

suaveSHOW

Aquí tendrias que hacer:

while($lecutra=mysql_fetch_array($lecturaconsulta)) {
$this->actualizar($lectura['id_product'], $POST['cantidad'], $POST['porcentaje']);
}

donde pone $lecturaconsulta tendria que ser, por ejemplo:

$lecturaconsulta=mysql_query("SELECT * FROM productos");

1 respuesta
DoodoM

A parte de lo que dice #2, que es lo que parece faltar, yo te recomendaría, al menos desde mi punto de vista, es que usaras sprintf para las sentencias SQL, sobretodo si hay datos que vienen a través de GET o POST. Es un buen hábito que todo el mundo debería tener.

A mi, desde que lo conozco y lo utilizo, lo de meter otras variables en medio de cadenas de texto separándolas por puntos (o comas) me chirría a los ojos, y además de ese modo puedes controlar el tipo de dato que se está añadiendo: si es un número entero, un decimal, una cadena de texto, etc...

1 respuesta
NeB1

#3 es más, yo SIEMPRE uso esta función:


/**
 *	Ejecuta una consulta mysql previo procesamiento de cada uno de los
 *  parámetros mediante mysql_real_escape_string. Además se genera la 
 *  cadena de consulta con vsprintf sirviendo como filtro para los tipos
 *  de datos que se pasan.
 *
 *	@author: Jordi Nebot Carda
 *
 *	@param arg[0] Consulta en formato printf {%d, %s, %f}
 *	@param arg[n] Parámetro a sustituir en el printf
 *
 *	@return mysql_resource
 */
function db_query()
{
	$args = func_get_args();
	$query = array_shift($args);
	return mysql_query(vsprintf($query, array_map('mysql_real_escape_string',$args)));
}
1 respuesta
Addys

#1 Pues yo creo que en la linea 6 te falta el paréntesis que cierra los VALUES dentro del string del query

DoodoM

#4 Tampoco está de más mysql_real_escape_string(), se me había olvidado mencionarlo. Yo suelo utilizarlo casi siempre (que no se me olvide), aunque tu modo de implementarlo me parece mucho más elegante.

Usuarios habituales

  • DoodoM
  • Addys
  • NeB1
  • suaveSHOW
  • soanix