PHP - Problema con Sintaxis con PHP y MYSQL

   
Vista:

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 22/09/2014 22:18:41
Buenas, intentaré resumir mi problema lo más corto posible.

He hecho un formulario en php para consultar información que tengo en mi base de datos.
El formulario consta de dos input y un boton.
Todo me funcionaba muy bien hasta que decidí crear un %comodin% para el primer input y asi el SELECT me seleccionaba un dato aunque no estuviera completo. Por ejemplo: Si queria seleccionar un Nombre que tuviera almenos la palabra "sangri" entonces me seleccionaba todo nombre que tuviera esa palabra, como "sangriento".
Y funcionaba pero me hacia una clase de conflicto con un OR que venia despues, el cual dejaba de funcionar como antes.

Os dejo una copia del codigo cuando funcionaba BIEN y ahora que funciona MAL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
if ($nombre or $id>0){
    $connect = mysql_connect("localhost","root","xxxx") or die ("No hemos podido acceder al servidor");
    mysql_select_db ("bdaleyda",$connect);
    $query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
Nombre='".$nombre."'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID='".$id."'
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC",$connect);
 
    //extraer datos
    $archivos = mysql_num_rows($query);
    if ($archivos>0) {
        echo "<center><table border='1'>";
            echo "<tr>";
            echo "<th class='serie'>N Serie</th>"; echo "<th class='nom'>Nombre</th>"; echo "<th>Peso</th>"; echo "<th>Precio</th>"; echo "<th class='qui'>Quilates</th>"; echo "<th>Sexo</th>"; echo "<th>Estado</th>"; echo "<th>Material</th>"; echo "<th>Marca</th>"; echo "<th>Estante</th>"; echo "<th>Fecha de Entrada</th>"; echo "<th class='descrip'>Descripcion</th>"; echo "<th>Fecha de Salida</th>";
            echo "</tr>";
        for ($i=0; $i<$archivos; $i++) {
            $columna = mysql_fetch_array($query);
            echo "<tr>";
 
            //Empiezan las columnas
            echo "<td>".$columna["ID"]."</td>";
            echo "<td>".$columna["Nombre"]."</td>"; etc

AHORA:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
if ($nombre or $id>0){
    $connect = mysql_connect("localhost","root","xxxx") or die ("No hemos podido acceder al servidor");
    mysql_select_db ("bdaleyda",$connect);
    $query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
[COLOR="Red"](CONVERT(Nombre USING utf8) LIKE '%$nombre%')[/COLOR]
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
[COLOR="Red"]OR joyas.ID='".$id."'[/COLOR]
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC",$connect);
 
    //extraer datos
    $archivos = mysql_num_rows($query);
    if ($archivos>0) {
        echo "<center><table border='1'>";
            echo "<tr>";
            echo "<th class='serie'>N Serie</th>"; echo "<th class='nom'>Nombre</th>"; echo "<th>Peso</th>"; echo "<th>Precio</th>"; echo "<th class='qui'>Quilates</th>"; echo "<th>Sexo</th>"; echo "<th>Estado</th>"; echo "<th>Material</th>"; echo "<th>Marca</th>"; echo "<th>Estante</th>"; echo "<th>Fecha de Entrada</th>"; echo "<th class='descrip'>Descripcion</th>"; echo "<th>Fecha de Salida</th>";
            echo "</tr>";
        for ($i=0; $i<$archivos; $i++) {
            $columna = mysql_fetch_array($query);
            echo "<tr>";
 
            //Empiezan las columnas
            echo "<td>".$columna["ID"]."</td>";
            echo "<td>".$columna["Nombre"]."</td>"; ETC

El asunto está en la linea del CONVERT y despues OR.
No se si me he explicado bien y ojala me puedan ayudar, le he echado cabeza pero no logró saber donde fallo. Lo mas seguro es que sea un fallo de sintaxis pero mis conocimientos no me permiten saber que debo poner.

Gracias por leerme, si no me he explicado bien por favor decirmelo e intento hacerlo mejor. :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con Sintaxis con PHP y MYSQL

Publicado por Gonzalo (338 intervenciones) el 22/09/2014 22:50:34
el unico cambio que veo es el texto [COLOR="Red"] [/COLOR]

WHERE [COLOR="Red"](CONVERT(Nombre USING utf8) LIKE '%$nombre%')[/COLOR]

y en

[COLOR="Red"]OR joyas.ID='".$id."'[/COLOR]

no parecen ser de mysql, forman parte del query? o trataste de resaltar esa parte del query?

el campo Nombre es unico? o se repite en alguna otra tabla?

tal vez falten () en

where (x,y,z) or (x,y,z) order by x,y,z

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 23/09/2014 01:17:53
Gracias por responder.
Lo del color es BBCode que puse para subrayar donde creia que estaba el error pero parece que este foro no lo aceptó ejjeje ya no puedo modificarlo.
He probado a ponerlo en parentesis pero ahora me funciona peor, antes almenos me funcionaba el CONVERT ahora NI EL CONVERT NI EL OR. ejejje

El codigo está hecho para que, en un principio, se pueda poner cualquiera de los dos valores de los input y encuentre un resultado. Me explico, pongo un valor en la variable $nombre y le doy al enter y encuentra algo, o si quiero no pongo nada en la variable $nombre pero si en la variable $id y al darle enter me encuentra la fila relacionada con el ID. Todo está en la misma etiqueta <form>.

En el primer codigo que expongo, el codigo, funciona perfectamente, puedo introducir un valor en cualquiera de los dos input (si quiero introduzco valores en los dos input) y al darle enter me encuentra lo que puse.

El problema viene al poner esta linea: (CONVERT(Nombre USING utf8) LIKE '%$nombre%') hace que funcione el convert pero es como si dejara fuera el OR de la variable $id. Por ejemplo: ahora pongo un valor en la variable &id y le doy al enter y no hace nada, como si no recogiera el valor POST de "id" = $id.

En cambio pongo los dos valores osea el de &nombre y el de &id y si me funciona, no sé es muy raro jejeje.
Si no logró hacerme entender veré si puedo hacer un video.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Gonzalo (338 intervenciones) el 23/09/2014 03:01:58
entiendo la orden like en mssql pero al parecer es diferente en mysql.

has intentado no usar el convert? tal vez la funcion mas simple pueda funcionar.

WHERE Nombre LIKE '%$nombre%'

modifica el query para que solo filtre en esta condición, si funciona entonces el problema pudiera ser alguna otra condición.

suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 23/09/2014 03:37:45
Funciona igual que el otro, me funciona el comodin pero el OR me lo abandona.
:( ya no se que hacer, no me gustaria separar los query y duplicar el codigo para algo que creo que funciona.
Error de MYSQL no creo que sea.

He puesto el codigo y al funcionar el LIKE con el comodin lleno entonces he probado con el comodin vacio y la variable que hay en el OR, osea &id, con algun valor y no me funciona. Entonces he pensado debe ser error de sintasix MYSQL y me he ido a la consola de MYSQL y he puesto lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(CONVERT(Nombre USING utf8) LIKE '%""%')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID=10
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC

Y FUNCIONA!! aunque en el LIKE haya un valor en blanco coje el valor de ID y me da el resultado. ENTONCES no debe ser error de MYSQL.

No entiendo por que el codigo que utilizo no funciona como lo hace en MYSQL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
Nombre LIKE '%".$nombre."%'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID='".$id."'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC",$connect);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 23/09/2014 05:51:17
He hecho un video, suelen decir que una imagen vale mas que mil palabras :)

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

Problema con Sintaxis con PHP y MYSQL

Publicado por xve (5520 intervenciones) el 23/09/2014 08:16:03
Muy bueno Juan!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 23/09/2014 16:54:59
Gracias pero aún sigo con mi problema, no hay forma de resolverlo parece.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Gonzalo (338 intervenciones) el 23/09/2014 16:47:27
an error ocurred please try gain later, lo vere llegando a la casa.

bien, vamos por partes.

en el query, el OR se supone que debe dividir la consulta en 2?

si es asi entonces primero hay que determinar si hay algun problema antes o despues del or.

--antes del or
$query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(CONVERT(Nombre USING utf8) LIKE='".$nombre."')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID");

--despues del or

$query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
joyas.ID='".$id."'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC");

revisalas por separado, si es que funcionan bien entonces pienso que deberias encapsular los 2 querys cada uno entre () or () de esta forma.

$query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(
(CONVERT(Nombre USING utf8) LIKE ='".$nombre."')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
)
OR
(
joyas.ID=10
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
)
ORDER BY joyas.ID ASC");

o deja anexo una orden sql en otro post, dame unos minutos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 23/09/2014 16:57:33
Sigue funcionando igual entre parentesis. Da los mismos resultados.

Por separado funcionan bien, hacen su funcion y juntos funcionaban bien hasta el momento en el que se me ocurrió poner la linea del LIKE.

Osea Nombre LIKE '%".$nombre."%'

En el video muestro que funciona bien y hace lo que quiero hasta que pongo el LIKE.
Lo raro es que en la consola de MYSQL no dá ningun problema. Me trae el resultado como debe ser pero en PHP no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Gonzalo (338 intervenciones) el 23/09/2014 17:00:29
bien, intentemos de esta manera

$query = mysql_query(
"SELECT
joyas.ID,
Nombre,
Precio,
Peso,
Quilates,
Sexo,
Estado,
Estante,
Marca,
Material,
FechaEntrada,
Descripcion,
FechaSalida
FROM joyas
inner join marcas on joyas.idMarca=marcas.ID
inner join estantes on joyas.idEstante=estantes.ID
inner join estados on joyas.idEstado=estados.ID
inner join sexos on joyas.idSexo=sexos.ID
inner join materiales on joyas.idMaterial=materiales.ID
WHERE Nombre (CONVERT(Nombre USING utf8) LIKE '%$nombre%')
or joyas.ID='$id'
ORDER BY joyas.ID ASC");

si no funciona entonces voy a tener que esperar a ver el video.

salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 23/09/2014 17:09:31
Nada compañero, no funciona. Con el simple hecho de poner Nombre delante del parentesis del CONVERT ya me deja de funcionar el comodin. Si quito Nombre entonces me funciona el comodin pero el OR solo, sigue dandome problemas y no me devuelve resultados.

El video lo he dejado por aquí, vuelvo a dejar el enlace para cuando tengas tiempo y mires mas o menos el problema que me dá.

dura 2 minutos. :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Gonzalo (338 intervenciones) el 23/09/2014 17:21:41
el utf8 se utiliza para pedirle a mysql que guarde correctamente signos especiales como áéíóú (entre otros), ese campo en particular, el del nombre, usaste utf8 para guardarlo en mysql? o definiste ese campo como utf8?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con Sintaxis con PHP y MYSQL

Publicado por Juan (8 intervenciones) el 23/09/2014 17:30:51
Si en MYSQL está definido en utf8 pero creo que eso da igual.

Si quiero no pongo el uft8 ni el USING ni el CONVERT.... Lo importante está en LIKE. Creo que el LIKE crea conflicto con el OR.

He probado poniendo un = y deja de hacer conflicto con el OR pero me deja de funcionar el LIKE.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas inner join marcas on joyas.idMarca=marcas.ID
inner join estantes on joyas.idEstante=estantes.ID
inner join estados on joyas.idEstado=estados.ID
inner join sexos on joyas.idSexo=sexos.ID
inner join materiales on joyas.idMaterial=materiales.ID WHERE

Nombre=LIKE '%".$nombre."%'


OR 

joyas.ID='".$id."'


ORDER BY joyas.ID ASC");

Asi me funciona el OR pero no el LIKE. Creo que la solucion puede estar en si es posible que el LIKE funcione despues de Nombre=

En cambio así funciona perfectamente el LIKE pero el OR no. (A ver si me explico, el OR funciona pero si va a compañado del LIKE, Osea si en el formulario introduzco valores en los dos inputs, cuando no funciona es cuando solo introduzco valor en el input del OR, osea en la variable $id)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas inner join marcas on joyas.idMarca=marcas.ID
inner join estantes on joyas.idEstante=estantes.ID
inner join estados on joyas.idEstado=estados.ID
inner join sexos on joyas.idSexo=sexos.ID
inner join materiales on joyas.idMaterial=materiales.ID WHERE

Nombre LIKE '%".$nombre."%'


OR 

joyas.ID='".$id."'


ORDER BY joyas.ID ASC");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar