Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: K4sS- en 25 Agosto 2012, 18:15 pm



Título: [Ayuda] SQL syntax error
Publicado por: K4sS- en 25 Agosto 2012, 18:15 pm
Hola, he creado una función y a la hora de llamarla me salta el siguiente error:

Código:
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 '' at line 1

La función es esta:

Código:
function mostrartallasdisponibles($identificador)
{

global $database_conexionzapatos, $conexionzapatos;
mysql_select_db($database_conexionzapatos, $conexionzapatos);
$query_ConsultaFuncion = sprintf("SELECT tbltallas.idTalla, tbltallas.strNombre, tbltallas.intAumento FROM tblproductotalla Inner Join tbltallas ON tblproductotalla.relTalla = tbltallas.idTalla WHERE tblproductotalla.relProducto =  %s", $identificador);
$ConsultaFuncion = mysql_query($query_ConsultaFuncion, $conexionzapatos) or die(mysql_error());
$row_ConsultaFuncion = mysql_fetch_assoc($ConsultaFuncion);
$totalRows_ConsultaFuncion = mysql_num_rows($ConsultaFuncion);
?>
    <?php
if ($totalRows_ConsultaFuncion > 0) {
?>
    Tallas:<select name="FTalla">
    <?php
do {
?>
<option value="<?php echo $row_ConsultaFuncion['strNombre']?>"><?php echo $row_ConsultaFuncion['strNombre']?></option>
<?php
} while ($row_ConsultaFuncion = mysql_fetch_assoc($ConsultaFuncion));
?>
        </select>
        <?php
}
else
{
echo "No hay tallas disponibles";
}

mysql_free_result($ConsultaFuncion);
}

¿Qué se os ocurre?

Muchas gracias


Título: Re: [Ayuda] SQL syntax error
Publicado por: alexander1712 en 26 Agosto 2012, 00:47 am
que tienes bastante desorden en ese código.

en primer lugar deberías identar para que se entienda.

en segundo, usar variables globales es una aberración, ni siquiera clases deberían globalizar porque para eso existe injección de dependencias.

Código:
$query_ConsultaFuncion = sprintf("SELECT tbltallas.idTalla, tbltallas.strNombre, tbltallas.intAumento FROM tblproductotalla Inner Join tbltallas ON tblproductotalla.relTalla = tbltallas.idTalla WHERE tblproductotalla.relProducto =  %s", $identificador);

revisa si la variable identificador contiene algún valor.

también te voy a criticar, aunque no me guste, varias cosas de esa parte, para que mejores:

no entiendo por que usas sprintf, quizá sea por algo que ignoro, pero según lo que entiendo de php.net -> sprintf (http://ar2.php.net/manual/es/function.sprintf.php)

está de más, gastas recursos en una función y ensima parseando el contenido.

debería ser así:

Código:
$query_ConsultaFuncion = 'SELECT tbltallas.idTalla, tbltallas.strNombre, tbltallas.intAumento FROM tblproductotalla Inner Join tbltallas ON tblproductotalla.relTalla = tbltallas.idTalla WHERE tblproductotalla.relProducto =  '.$identificador;

otra cosa es que no filtras la variable, por ejemplo podrías usar mysql_real_escape_string

Código:
$query_ConsultaFuncion = 'SELECT tbltallas.idTalla, tbltallas.strNombre, tbltallas.intAumento FROM tblproductotalla Inner Join tbltallas ON tblproductotalla.relTalla = tbltallas.idTalla WHERE tblproductotalla.relProducto =  '.mysql_real_escape_string($identificador);

y por último, si eso es string como muestras en el ejemplo con %s, deberías escapar el texto así:

Código:
$query_ConsultaFuncion = 'SELECT tbltallas.idTalla, tbltallas.strNombre, tbltallas.intAumento FROM tblproductotalla Inner Join tbltallas ON tblproductotalla.relTalla = tbltallas.idTalla WHERE tblproductotalla.relProducto = \' '.mysql_real_escape_string($identificador).'\'';

además, si tu proyecto es grande, no te recomiendo utilizar diseño con php mezclado, te recomiendo basarte en MVC y tener el código ordenado.

Código:
echo "No hay tallas disponibles";

siendo texto literal deberías ponerlo con apostrofos

Código:
echo 'No hay tallas disponibles';

consume el doble sin necesidad.

te recomiendo usar lo menos posible comillas.

te paso mi proyecto, quizá puedas utilizar alguna función para tu proyecto, no me molesta ^^

http://foro.elhacker.net/php/iblog_cms_en_poo_mvc-t369533.0.html

una ultima recomendación, utiliza nombres cortos, no tan largos, porque sino es mucho código para pocas cosas.



fuera de éso que en realidad no es obligatorio solo una sugerencia para futuros códigos, tu problema sin más alarde APARENTEMENTE parece que el $identificador no tiene ningún valor.

saludos!