Foros del Web » Programando para Internet » PHP »

consultas sql con sesiones en php

Estas en el tema de consultas sql con sesiones en php en el foro de PHP en Foros del Web. Buenas tardes, estoy trabajando con consultas sql en php y quiero que se recoja la búsqueda que hago en un .php mediante sesiones en otro ...
  #1 (permalink)  
Antiguo 08/08/2014, 07:24
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 10 meses
Puntos: 0
consultas sql con sesiones en php

Buenas tardes,

estoy trabajando con consultas sql en php y quiero que se recoja la búsqueda que hago en un .php mediante sesiones en otro php. La búsqueda se recoge bien porque en el segundo php hago un echo y me sale la palabra de búsqueda correcta, pero no me inserta el contenido correctamente (eso es lo que hace el botón que me lleva al segundo php). No se si es debido a que hago mal la consulta o que me falta algo...

Lo que pretendo es que, escribiendo un nombre de empresa en el buscador, mediante un único botón, se suba la ruta del contenido que selecciono en el botón examinar en todas y cada una de las tablas que contienen dicho nombre de empresa.

Esta es la consulta que realizo en el php al que me lleva el botón que sube el contenido:

Código PHP:
Ver original
  1. mysql_query("INSERT INTO `{v1}` VALUES  ('$v1', '$fila[Dispositivos]', '$puertos[Puerto]', '$puertos[Puerto]_ssh', '$nombreDirectorio', 'now()', '$SI',  '$NO, ' ', '$empresa2[nombre_de_la_empresa]') WHERE nombre_de_la_empresa=".$_SESSION['busca']);

Tengo que poner algo más en este segundo php? Está bien hecha mi consulta?

Muchas gracias!!!
  #2 (permalink)  
Antiguo 08/08/2014, 07:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: consultas sql con sesiones en php

Tu consulta está mal hecha, eso es evidente.

¿Si sabes que tienes que escapar apropiadamente los valores de tu consulta?

Es decir, si quieres decubrir el error que tienes usa el valor de mysql_error() para descubrir el problema.

Es un tema totalmente de SQL, básicamente estás omitiendo las comillas al rededor del valor de nombre_de_la_empresa, nada más.

Además now() es una función de MySQL por lo tanto debe ir sin comillas, etc.

Consulta una referencia de SQL.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/08/2014, 09:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas sql con sesiones en php

Vamos por parte...
En lo referente a MySQL, tienes al menos tres errores de sintaxis:
1) WHERE no es cláusula del INSERT:
Código MySQL:
Ver original
  1. INSERT INTO `{v1}`
  2. VALUES  ('$v1', '$fila[Dispositivos]', '$puertos[Puerto]', '$puertos[Puerto]_ssh', '$nombreDirectorio', 'now()', '$SI',  '$NO, ' ', '$empresa2[nombre_de_la_empresa]')
  3. WHERE nombre_de_la_empresa=".$_SESSION['busca']);
2) 'now()', no es la función NOW(), sino un texto que dice "now()". En MySQL las funciones nativas van sin apostrofos, comillas o acentos agudos. Las funciones almacenadas pueden llevar acentos agudos, pero no apostrofos.
Código MySQL:
Ver original
  1. INSERT INTO `{v1}`
  2. VALUES  ('$v1', '$fila[Dispositivos]', '$puertos[Puerto]', '$puertos[Puerto]_ssh', '$nombreDirectorio', NOW(), '$SI',  '$NO, ' ', '$empresa2[nombre_de_la_empresa]')
3) Un espacio vacío no es un NULL. Si un dato no va, pero es nulable, o le pones NULL, o debes indicar uno a uno los campos, y omitir aquellos donde no se insertarán datos. De lo contrario, si vas a buscar por datos nulos, no obtendrás resultados correctos.
Código MySQL:
Ver original
  1. INSERT INTO `{v1}`
  2. VALUES  ('$v1', '$fila[Dispositivos]', '$puertos[Puerto]', '$puertos[Puerto]_ssh', '$nombreDirectorio', NOW(), '$SI',  '$NO, NULL, '$empresa2[nombre_de_la_empresa]')

todo esto lo hubieras resuelto si al menos le pusieras un or die() a la funcion de la query...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/08/2014, 00:40
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: consultas sql con sesiones en php

Muchas gracias pateketrueke por los aportes, me he dado cuenta de las comillas en now(), en mi código no las tengo, no se porqué aquí se he han escapado :)

Dos cosillas gnzsoloyo:

*Toda la interfaz la he programado con espacios vacíos en vez de NULL y en las consultas e inserciones me salta bien los campos que no quiero rellenar. Puede ser que funciones las dos cosas? Porque a mí no me da ningún error y sí que obtengo resultados correctos en todo momento =S

*Quiero que en mi consulta, se inserte el dato de la ruta SOLAMENTE en aquellas tablas que contengan el nombre de empresa que hago en la búsqueda, por eso busqué información y en diversas páginas me aparece la cláusula WHERE. Soy bastante principiante en estos temas y estoy comenzando con php como quien dice, así que teniendo en cuenta que necesito una condición...me fié de lo encontrado.
¿ómo puedo hacer entonces para poner una condición?

Muchas gracias.
  #5 (permalink)  
Antiguo 11/08/2014, 06:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas sql con sesiones en php

Cita:
*Toda la interfaz la he programado con espacios vacíos en vez de NULL y en las consultas e inserciones me salta bien los campos que no quiero rellenar. Puede ser que funciones las dos cosas? Porque a mí no me da ningún error y sí que obtengo resultados correctos en todo momento =S
No estás entendiendo lo que te digo...
Vamos a ver si se entiende: NULL en bases de datos no es un dato, es un estado de indefinición. No es lo mismo un caracter vacío (cadena de texto vacía) que un NULL, y cuando le insertar un caracter vacío no estás insertando NULL en la tabla. Por consecuencia un INSERT donde pongas uno de ellos sobre un campo definido como NOT NULL no disparará errores, pero si puede generar defectos en los datos obtenidos en las consultas.
Es decir:
Código MySQL:
Ver original
  1. INSERT tabla(b, c, d) VALUES('', '', '')
donde los campos estás definidos como NOT NULL te dejará hacer la inserción sin errores, pero luego, si llegases a hacer:
Código MySQL:
Ver original
  1. SELECT a, b, c, d
  2. FROM tabla
Esa consulta no devolverá ese registro porque ese campo no contiene un NULL. Contiene un caracter vacío, que no es lo mismo (ni siquiera como código ASCII).
Por otro lado, si alguna de esas columnas corresponde a una clave foránea, y no existe en la tabla referida una clave que contenga un caracter vacío, no serviría para hacer JOINs.

¿Qué corresponde hacer, entonces?
Simple: Si los campos aceptan NULL, ponerles NULL en el INSERT o UPDATE que corresponda, pero NO poner cadenas vacías:

Código MySQL:
Ver original
  1. INSERT tabla(b, c, d) VALUES(NULL, NULL, NULL)
nota que no estoy poniendo los NULL entre apostrofes, porque si lo hago no serían NULL sino cadenas de texto que digan "NULL".

Y si esas columnas no aceptan NULL, el INSERT que los tuviese dispararía un error por valor ilegal, lo que te permitiría asegurar que la información obligatoria ha sido efectivamente ingresada po rel usuairo donde debe, y no le permite dar altas de registros corruptos.

¿Se entiende?

Imaginate si el dato fuese el numero de tarjeta de crédito en un pago, y el tipo olvida ponerlo... ¿Cómo te aseguras que no se omita, o que no hayas omitido verificarlo en la validación correspondiente?
Datos mandatorios (obligatorios) deben siempre ser declarados NOT NUL en las tablas, y NO se debe usar cadenas vacías si el dato falta. Debes obligar al usuario a cumplir con los datos obligatorios.
Siempre.

Cita:
Quiero que en mi consulta, se inserte el dato de la ruta SOLAMENTE en aquellas tablas que contengan el nombre de empresa que hago en la búsqueda, por eso busqué información y en diversas páginas me aparece la cláusula WHERE. Soy bastante principiante en estos temas y estoy comenzando con php como quien dice, así que teniendo en cuenta que necesito una condición...me fié de lo encontrado.
¿ómo puedo hacer entonces para poner una condición?
Aquí pareces estar hablando de actualizar datos de un registro, y no insertar datos. En ese caso corresponde usar UPDATE, no INSERT.
INSERT crea registros nuevos no actualiza existentes. En ese contexto, no existen datos sobre los que hacer comparaciones, porque aún no se ha insertado el conjunto nuevo. Por eso INSERT no acepta WHERE.
Lo que sí puede suceder es que se esté insertando una PK duplicada, caso para el que existe una clausula especial (ON DUPLICATE KEY), que se usa para resolver el escenario.
Por otro lado, en MySQL existe una sentencia que posee una sintaxis especial y es REPLACE, la cual cumple ambas funciones (insertar/actualizar), peor debe ser usada con cuidado para no eliminar datos de los campos por accidente, o generar errores de restricciones si se afectan columnas que sean FK. Es de uso algo complejo de controlar.

En todo caso si lo que quieres es insertar si no existe otro que contenga un X valor, deberías hacer una consulta previa par verificar si ya existe, y en caso de no encontrarlo, entonces SI insertar el nuevo registro, o bien realizar el UPDATE correspondiente, si eso es lo que deseas.

¿Se entiende la idea?

Recuerda: NULL no es un dato. Es un estado donde no está definido ningún valor .
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 11/08/2014 a las 07:30
  #6 (permalink)  
Antiguo 12/08/2014, 05:56
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: consultas sql con sesiones en php

Ya me funciona, muchas gracias por la extensa explicación, es la forma en la que tengo desarrollado el dinamismo en la interfaz lo que me da problemas, no las sesiones, al parecer eso está bien.

Etiquetas: mysql, sesiones, sql, tabla
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 22:18.