Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿insertar string o un null en base de datos con PHP?

Estas en el tema de ¿insertar string o un null en base de datos con PHP? en el foro de PHP en Foros del Web. Tengo en la base de datos tengo por ejemplo, un campo string (varchar) llamado nombre. El nombre puede estar null. Código PHP: $nombre  =  "Gloton" ...
  #1 (permalink)  
Antiguo 27/03/2014, 13:39
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 18 años
Puntos: 3
Pregunta ¿insertar string o un null en base de datos con PHP?

Tengo en la base de datos tengo por ejemplo, un campo string (varchar) llamado nombre. El nombre puede estar null.
Código PHP:
$nombre "Gloton";
//Hago la consulta de la siguiente forma.
$sql "INSERT INTO mitabla values ('".$nombre."')";
echo 
$sql//se imprime:INSERT INTO mitabla values ('Gloton') 
La anterior estaria OK pero si lo dejo null $nombre, deja la consulta con un valor vacio.
Código PHP:
$nombre NULL;
$sql "INSERT INTO mitabla values ('".$nombre."')";
echo 
$sql;//se imprime: INSERT INTO mitabla values ('') 
Y en el tercer caso le coloco 'null', no se guarda como valor null sino que como un string null
Código PHP:
$nombre 'null';
$sql "INSERT INTO mitabla values ('".$nombre."')";
echo 
$sql;//se imprime: INSERT INTO mitabla values ('null') 

¿Cual es la forma de guardar un string, en este caso el nombre, y que cuando no tenga el nombre dejar el valor en la base de datos como null (no como string con valor null sino que como valor null) ?
  #2 (permalink)  
Antiguo 27/03/2014, 14:02
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 17 años, 11 meses
Puntos: 8
Respuesta: ¿insertar string o un null en base de datos con PHP?

Hola

no debes escribirlo entre comillas, "... values (NULL) ..." debería funcionar, incluso si la variables es $var = 'NULL', al ponerla así "... values ($var) ..." creo que también, pero nunca entre las comillas simples que estás usando o lo interpretará como un valor, sea el que sea.
  #3 (permalink)  
Antiguo 27/03/2014, 14:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿insertar string o un null en base de datos con PHP?

Cita:
¿Cual es la forma de guardar un string, en este caso el nombre, y que cuando no tenga el nombre dejar el valor en la base de datos como null (no como string con valor null sino que como valor null) ?
Debe quedar así:
Código SQL:
Ver original
  1. INSERT INTO mitabla VALUES (NULL)
__________________
¿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 27/03/2014, 14:13
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 18 años
Puntos: 3
Respuesta: ¿insertar string o un null en base de datos con PHP?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Debe quedar así:
Código SQL:
Ver original
  1. INSERT INTO mitabla VALUES (NULL)
Claro, eso lo puedo hacer, pero directo de mysql no desde PHP, Porque asi no podria asignarle un valor string como Gloton porque la consulta quedaria
Código SQL:
Ver original
  1. INSERT INTO mitabla VALUES (Gloton)
lo cual no me acepta la consulta en mysql.




Y no
Código SQL:
Ver original
  1. INSERT INTO mitabla VALUES ('Gloton')

Última edición por Gloton; 27/03/2014 a las 14:24
  #5 (permalink)  
Antiguo 27/03/2014, 14:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿insertar string o un null en base de datos con PHP?

Creo que no me entendiste...

Lo que te mostré es cómo debe quedar la query en SQL, con sólo mirarlo es bastante obvio que lo que tienes que hacer es:
Código PHP:
Ver original
  1. $nombre = 'NULL';
  2. $sql = "INSERT INTO mitabla values ($nombre)";
¿no te parece?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 27/03/2014, 14:48
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 18 años
Puntos: 3
Respuesta: ¿insertar string o un null en base de datos con PHP?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Creo que no me entendiste...

Lo que te mostré es cómo debe quedar la query en SQL, con sólo mirarlo es bastante obvio que lo que tienes que hacer es:
Código PHP:
Ver original
  1. $nombre = 'NULL';
  2. $sql = "INSERT INTO mitabla values ($nombre)";
¿no te parece?
Lo intente, pero en ese caso en mysql no queda con un valor nulo, sino que queda como un string no como un null. Lo puse en el primer post en el tercer caso pero no funciona .

Puedes comprobarlo con la funcion IS NULL
  #7 (permalink)  
Antiguo 27/03/2014, 14:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿insertar string o un null en base de datos con PHP?

Tu tercer caso no inserta NULL, inserta una cadena de texto que dice "NULL", que no es lo mismo.
Quita los apóstrofos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 27/03/2014, 15:01
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 18 años
Puntos: 3
Respuesta: ¿insertar string o un null en base de datos con PHP?

Tu codigo para solucionar el problema es

Código PHP:
$nombre 'NULL';
$sql "INSERT INTO mitabla values ($nombre)"
Mira, cambia lo que tienes entre comillas por el nombre
Código PHP:
Ver original
  1. $nombre = 'gloton';
  2. $sql = "INSERT INTO mitabla values ($nombre)";
Quedaria
Código PHP:
Ver original
  1. INSERT INTO mitabla values (gloton)
y no se guardaria en mysql
  #9 (permalink)  
Antiguo 27/03/2014, 15:19
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 17 años, 11 meses
Puntos: 8
Respuesta: ¿insertar string o un null en base de datos con PHP?

Hola,

cuando sea null puedes crearla así

Código PHP:
Ver original
  1. $nombre = "NULL";

y cuando no lo sea

Código PHP:
Ver original
  1. $nombre = '"pepe"';

con unas comillas extra, o crear una condición distinguiendo si es null o no y a partir de ahí manipular el string, crear una consulta u otra....etc. Aunque eso ya no es lo mismo que preguntabas al inicio, la solución ya la tienes ahora es saber cómo aplicarla de la mejor manera.
  #10 (permalink)  
Antiguo 27/03/2014, 16:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿insertar string o un null en base de datos con PHP?

Cita:
Iniciado por Gloton Ver Mensaje
Tu codigo para solucionar el problema es

Código PHP:
$nombre 'NULL';
$sql "INSERT INTO mitabla values ($nombre)"
Mira, cambia lo que tienes entre comillas por el nombre
Código PHP:
Ver original
  1. $nombre = 'gloton';
  2. $sql = "INSERT INTO mitabla values ($nombre)";
Quedaria
Código PHP:
Ver original
  1. INSERT INTO mitabla values (gloton)
y no se guardaria en mysql
Vamos a hacer una aclaración que ya deberías conocer: MySQL No es PHP, y PHP no es MySQL.
MySQL no entiende las variables de PHP, sencillamente porque jamás "dialogan" entre sí. Lo que hace PHP con las librerías es poner en un puerto determinado (3306 usualmente), un mensaje que MySQL "escucha". Ese mensaje es SQL puro.
MySQL luego devuelve en ese mismo puerto un conjunto de datos formateados como arrays que la librería de PHP interpreta para manipularlos. Pero jamás hay interacción directa entre ambas cosas.
¿Qué significa todo esto?
Que lo que haces en PHP es crear SQL, sólo SQL y nada más que SQL. Por consecuencia, las variables de PHP no existen para MySQL, sino que su contenido se toma para crear esa sentencia, y por consecuencia, la sentencia debe respetar la sintaxis de SQL.
Esto último, entre otras consideraciones: implica que:
- Las cadenas de texto deben estar entre apóstrofes.
- los números no deben estar entre apóstrofes (no son cadenas de texto)
- Los decimales se representan con puntos.
- Las fechas y horas se ponen entre apostrofos, respetando el formato de fechas y horas de MySQL.
- Las cláusulas de las sentencias no deben estar entre apóstrofes ni comillas.
- Los nombres de tablas pueden estar entre acentos agudos.
- Los operadores de todo tipo van sin apostrofos, comillas o acentos agudos.

Y en este último sentido, NULL, NOT, IN, AND, OR, etc., deben estar en la sentencia sin apostrofos .

¿Se entiende?
Estás embebiendo SQL en PHP, pero el SQL tiene sus propias reglas que debes cumplir si quieres que las sentencias se ejecuten sin errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 27/03/2014, 23:34
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 18 años
Puntos: 3
Respuesta: ¿insertar string o un null en base de datos con PHP?

Cita:
Iniciado por fiu Ver Mensaje
Hola,

cuando sea null puedes crearla así

Código PHP:
Ver original
  1. $nombre = "NULL";

y cuando no lo sea

Código PHP:
Ver original
  1. $nombre = '"pepe"';

con unas comillas extra, o crear una condición distinguiendo si es null o no y a partir de ahí manipular el string, crear una consulta u otra....etc. Aunque eso ya no es lo mismo que preguntabas al inicio, la solución ya la tienes ahora es saber cómo aplicarla de la mejor manera.
No lo habia podido probar, hace poco llegue a la casa y me guie por lo que colocaste, y le coloque
Código PHP:
"'".$nombre."'" 
y me funciono

Muchas gracias.
  #12 (permalink)  
Antiguo 27/03/2014, 23:40
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 18 años
Puntos: 3
De acuerdo Respuesta: ¿insertar string o un null en base de datos con PHP?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Vamos a hacer una aclaración que ya deberías conocer: MySQL No es PHP, y PHP no es MySQL.
MySQL no entiende las variables de PHP, sencillamente porque jamás "dialogan" entre sí. Lo que hace PHP con las librerías es poner en un puerto determinado (3306 usualmente), un mensaje que MySQL "escucha". Ese mensaje es SQL puro.
MySQL luego devuelve en ese mismo puerto un conjunto de datos formateados como arrays que la librería de PHP interpreta para manipularlos. Pero jamás hay interacción directa entre ambas cosas.
¿Qué significa todo esto?
Que lo que haces en PHP es crear SQL, sólo SQL y nada más que SQL. Por consecuencia, las variables de PHP no existen para MySQL, sino que su contenido se toma para crear esa sentencia, y por consecuencia, la sentencia debe respetar la sintaxis de SQL.
Esto último, entre otras consideraciones: implica que:
- Las cadenas de texto deben estar entre apóstrofes.
- los números no deben estar entre apóstrofes (no son cadenas de texto)
- Los decimales se representan con puntos.
- Las fechas y horas se ponen entre apostrofos, respetando el formato de fechas y horas de MySQL.
- Las cláusulas de las sentencias no deben estar entre apóstrofes ni comillas.
- Los nombres de tablas pueden estar entre acentos agudos.
- Los operadores de todo tipo van sin apostrofos, comillas o acentos agudos.

Y en este último sentido, NULL, NOT, IN, AND, OR, etc., deben estar en la sentencia sin apostrofos .

¿Se entiende?
Estás embebiendo SQL en PHP, pero el SQL tiene sus propias reglas que debes cumplir si quieres que las sentencias se ejecuten sin errores.
Eso lo tengo claro, pero creo que no nos pudimos entender bien, o no me pude dar a ententer mejor, lo siento por eso. Pero muchas gracias por el tiempo y trabajo que te tomaste en tratar de enseñarme, te puse un like.

Etiquetas: null, sql, string, 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 21:09.