Insertar registros en MySQL

En un articulo anterior Conectar PHP con MySQL explicamos como realizar una conexión a MySQL y obtener datos con PHP, en esta ocasión veremos como insertar registros en nuestra base de datos.

insert-mysql

Creando la Base de datos
Para este ejemplo necesitamos una base de datos que la llamaremos demo, en la cual crearemos un tabla llamada empresa la cual tendrá los siguientes campos: idemp, nombre, direccion, telefono. Para los menos experimentados les dejo el script SQL para crear esta tabla.

Sintaxis SQL para insertar registros
Lo primero que necesitamos conocer el la sintaxis SQL para insertar registros la cual mostramos a continuación en donde table es la tabla donde deseamos insertar los datos, field1 y field2 son los nombres de los campos y value1 y value2 los valores:

[SQL]
INSERT INTO table (field1, field2) VALUES (value1, value2)
[/SQL]

Luego, para hacer la inserción utilizando PHP, lo primero es crear una conexión y luego enviar la consulta utilizando el método mysql_query de la siguiente forma:

php
  1. $conexion = mysql_connect("localhost", "usuario", "clave");
  2. mysql_select_db("demo", $conexion);
  3.  
  4. $que = "INSERT INTO empresa (nombre, direccion, telefono) ";
  5. $que.= "VALUES ('Inka Tours', 'Av Pardo 728', '511 4845858') ";
  6. $res = mysql_query($que, $conexion) or die(mysql_error());

Creando el Formulario
Para que el usuario puede ingresar los datos de manera sencilla crearemos un formulario en cual cual se ingresarán los datos de la empresa, para ello creamos el formulario en html.

HTML4
  1. <form id="insertar" name="insertar" method="post" action="">
  2. Nombre:
  3. <input name="nombre" type="text" id="nombre" size="50" />
  4. Direccion:
  5. <input name="dir" type="text" id="dir" size="50" />
  6. Telefono:
  7. <input name="fono" type="text" id="fono" size="50" />
  8. <input type="submit" name="Submit" value="Insertar Registro" />
  9. <input type="hidden" name="action" value="add" />
  10. </form>

Notese que hemos agregado un campo oculto llamado action el cual lo utilizaremos para verificar si se ha enviado el formulario y procesar los datos. Entonces verificamos que se enviado el formulario en cuyo caso realizamos la conexión a MySQL y enviamos la consulta para insertar los datos.

php
  1. $state = false;
  2. if ($_POST['action'] == "add") {
  3.     $conexion = mysql_connect("localhost", "usuario", "clave");
  4.     mysql_select_db("demo", $conexion);
  5.    
  6.     $que = "INSERT INTO empresa (nombre, direccion, telefono) ";
  7.     $que.= "VALUES ('".$_POST['nombre']."', '".$_POST['dir']."', '".$_POST['fono']."') ";
  8.     $res = mysql_query($que, $conexion) or die(mysql_error());
  9.     $state = true;
  10. }

Finalmente mostramos un mensaje cuando se ha insertado correctamente el registro en la base de datos.

HTML4
  1. <?php if ($state) { ?>
  2. <p><em>Registro insertado correctamente</em></p>
  3. <?php } ?>

Observaciones
Por motivos de facilitar el entendimiento del funcionamiento de la inserción de datos hemos obviado algunos puntos. Pero es necesario advertir que para insertar registros los datos que vienen desde formularios nunca deben ir directamente a la consulta pues pueden contener sentencias SQL (Esto es llamado Inyección SQL) proceso mediante el cual pueden ingresar a nuestros sistemas y manipular datos sin consentimiento nuestro.

Otro punto que hay que tener en cuenta es validar los datos, esto para prevenir que se ingrese texto donde debería haber números por ejemplo, lo cual generaría errores de SQL.

Finalmente les dejo los archivos fuente para que lo descarguen y hagan sus propias pruebas para comprender el funcionamiento de este script.

Comentarios Total 69 comentarios


Christian
Publicado: 31/03/2009 4:50 am

El artículo parece muy contenido de relleno, cosa de no dejar “inactivo” el blog

unijimpe
Publicado: 31/03/2009 10:09 am

Hola, es probable que comentes esto por que tu ya sabes como insertar, editar y eliminar registros en MySQL pero también hay personas que están aprendiendo, motivo por el cual decidí crear este post, por mi parte antes de publicar algo que no me parece interesante o útil prefiero no publicar nada.

Algrox
Publicado: 01/04/2009 9:44 pm

Bueno amigo gracias por hacerme caso, gracias por el aporte, soy el que te pedi este post muchas gracias amigo.

Julita
Publicado: 03/04/2009 12:20 pm

hola unijimpe
he probado en mi host pero cuando inserto los datos me sale
No database selected
agradeceria me ayudes con esto

y gracias por tan util post

unijimpe
Publicado: 03/04/2009 12:39 pm

Lo que pasa es que no haz puesto el nombre de la base de datos a donde te quietes conectar, esto lo puedes hacer donde encuentra la funcion mysql_select_db

Julita
Publicado: 03/04/2009 2:59 pm

gracias por responder tan pronto unijimpe
esto es lo que tengo en codigos

patricio
Publicado: 11/04/2009 3:16 pm

hola,queria darte las gracias por esta maravillosa explicacion de como conectar un formulario php a una base de datos para introducir datos.

saludos

Jhony Ferreira
Publicado: 02/05/2009 6:54 pm

Hermano muy bueno este post gracias de verdad muy util para las personas que nos iniciamos

onslaught
Publicado: 04/05/2009 2:57 am

Hola gracias por este aporte, pero me quedan algunas dudas, estoy usando un formulario con muchos mas campos y cuando quiero insertar mas de 3 campos como lo explicaste anterior mente no puedo hacerlo solo me reconoce los 3 primeros, que me recomendarias???

carlos hernandez
Publicado: 08/05/2009 5:23 pm

hola unijimpe quisiera saber si no tienes por ahi un codigo completo de anadir, modificar y eliminar datos de una base de datos, para estudiarla ya que ocupo hacer una de registro de usuarios
prometo poner los creditos jejejeje
gracias…

nelida
Publicado: 04/06/2009 2:50 pm

buenas tardes.ralice le formulario y realice la conexion,al ejecutarlo sale Registro insertado correctamente, pero cuando voy a buscar en la base de datos no aparecen los datos. agradeceria tu respuesta.y lo felicito por la explicacion.

Derleth
Publicado: 14/06/2009 4:12 pm

hola, entendi todo pero me quedo con esta duda
Para que sirve??:
“”

si es un campo oculto y se supone que no accesan datos, podrias explicar como funciona esa parte??

Derleth
Publicado: 14/06/2009 5:37 pm

bueno ya que no se puede copiar esa parte, para que me entiendan, me referia a la linea 9

unijimpe
Publicado: 14/06/2009 6:34 pm

Derleth, esa variable oculta la utilizo para verificar que se esta enviando un formulario con datos, entonces si hay esa variable recién proceso los datos.

Hvason
Publicado: 23/06/2009 1:14 am

Hola Unijimpe siempre visito tu blog se agradece porque es de mucha utilidad para los que estamos metidos en esto del desarrollo web, no se si pediria mucho pero, crees que podrias poner un tuto de mantenimiento con este mismo ejemplo es decir, eliminar, buscar, filtrar o algun detalle mas para completar este pequeño sistemita, espero que tengas tiempo y subas algo de lo que pido.

Saludos.

Yeow
Publicado: 27/06/2009 3:47 pm

Muchisimas graxias!!!
Me anda perfecto!
Le he hecho alguna modificaciones para poder adaptarlo a lo que necesitaba pero es perfecto!

Muchisimas graxias!!!

Yeow.
htto://www.yeow.com.ar

joel
Publicado: 08/07/2009 4:44 pm

ola man yo quisiera azer asi peor no se en naa to cero quiero q me xplikes en un tuto osea lo que yo quiero es crear mi buscador de mp3, en mi host tengo toda mi bulla ya como ago man? xplica po

Andres Medina
Publicado: 09/08/2009 6:24 pm

Excelente post, muchisimas gracias por la ayuda…. EXCELENTE..

Gabriel
Publicado: 29/08/2009 11:35 pm

hola que primero que nada gracias por estos gran aportes la verdad es de una gran ayuda a la comunidad

ahora tengo un problemitaal intentar todo esto tengo este error

Notice: Undefined index: action in C:\wamp\www\estevanperalta\insert-mysql.php on line 3

lo demas funciona todo bien me ase el registro sin ningun problema nada mas ese error molesta necesitaria una solucion muchas gracias mi correo es pc.gamers@live.com

unijimpe
Publicado: 30/08/2009 1:30 am

Gabriel, el mensaje que te sale es un warning o una alerta que te dice que la variable $_POST['action'] no existe, esto por que al inicio cuando no se ha enviado el formulario aun no existe esta variable.

Puedes resolver esto ocultando estos warnings (que no son errores) agregando la opcion para mostrar solo los errores en las paginas, para ellos debes colocar el siguiente código en la primera linea de tu PHP.

error_reporting(E_ERROR)

Gabriel
Publicado: 30/08/2009 12:15 pm

Muchas gracias esta solucionado eres un diosss!!!

macker.net
Publicado: 02/09/2009 11:20 pm

man eres un astro este tutorial esta wuaooooooooo
hice unas modificaciones en el codigo y ya de verdad mil gracias…
ojala sigan saliendo mas tutos especialmente de seguridad en php.

oto
Publicado: 21/09/2009 10:57 pm

porfá ayuda, no me guarda los datos ingresados y siempre esta el mensaje de registro insertado correctamente.
de antemano mis felicitaciones, pero necesito la ayuda.

oto
Publicado: 21/09/2009 11:41 pm

amigos, solucionado era un problema con la contraseña del wamp era ese pequeño detalle ahora sí, el codigo anda de lujo . claro que el mensaje sigue apareciendo todo el rato. ¿como se hace para que aparezca sólo cuando los datos han sido correctamente ingresados?

jhon blas aviza
Publicado: 31/10/2009 9:16 am

hermano muy buena tu pagina, soy de bolivia, y tu explicacion ha sido excelente, he una consulta no si podes mandarme mas sobre reportes en pdf es lo que necesito para terminar mi sistema de hospital haceme ese favor chau y gracias

sergio
Publicado: 25/11/2009 1:30 am

Hola amigo!! que tal tengo un problema, la vrdd soi nuevo en esto y segui tus consejos pero al momento de querer insertar los datos no me dice que se hayan insertado y no los inserta no me marca ningun error este es mi codigo:

Registro insertado correctamente

podrias ayudarme??

sergio
Publicado: 25/11/2009 1:33 am

una pregunta mas disculpa, el codigo php debe ser escrito en otro archivo?? me explico: el formulario html en una pagina y en otra pag php el codigo de la insercion?? gracias

Montecristo
Publicado: 03/12/2009 6:35 pm

Y si lo que quiero es elimar datos como le hago??

de antemano gracias!!!

Francis
Publicado: 04/01/2010 5:19 am

Gracias tios, son de lo mejor, acabo de descubrir su web y me parecio de lo mejor. No cambien mas. :)

Amanda
Publicado: 07/01/2010 8:31 pm

hola! buenisima esta infomacion!!!……….me ha ayudado mucho!!! pues soy novata en php……!!!!!!!

delfi9
Publicado: 07/01/2010 8:35 pm

Gracias me ayudo muchjo esta informacion…!!!!!!!!!
pero tengo un problema: Al intentar enviar a la base de datos valores numerico no me los envia…… pero si envio cadenas si lo hace, me podrias ayudar, como envio datos numericos???…..

espero tu respuestas gracias………

raul
Publicado: 31/01/2010 4:30 pm

Hola unijimpe quiero que me ayudes en una consulta de mysql ,como hago para que haya una tabla dinamica para cada visitante i no se mezclen lo que selecciona cada visitante. espero tu respuesta gracias

CARLA VERA
Publicado: 20/02/2010 8:10 am

Unijimpe:

Me parece excelente tu web!!! muy muy buena y didáctica….me sirvió muchísimo el código que has publicado….además dejame decirte que tu paciencia es admirable!!! le explicas y te das el tiempo de atender a todos los zánganos que te escriben!; y que claramente no hacen ni un mínimo esfuerzo por tratar de entender el funcionamiento del código o buscar información adicional para adecuarlo a sus requerimientos….

En fin! muy bueno tu blog!

Un abrazo,

Carla

urielmoka
Publicado: 24/02/2010 12:54 pm

Excelente !!! y bien explicado, Gracie, Gracie

Armando
Publicado: 31/03/2010 11:34 pm

Vaya… por lo que leo en cada post debería resultar fácil estas operaciones pero en mi caso no funciona. Tengo un FORM en HTML y quiero recibir los datos en PHP. El caso es que defino mis variables para recibir los datos asi: $v1=$_POST[VARIABLE]. Luego hago la conexion a mi base de datos e inserto $v1… ¡Y $v1 està VACIO!

Hice la evaluaciòn de la variable para ver el tipo:

echo “El tipo de $v1 “.GetType($v1) y el resultado me indica que es NULL y por eso no pasa nada a la base de datos. ¡Que carajo pasa! ¿pude alguien echarme una mano?

unijimpe
Publicado: 31/03/2010 11:46 pm

Para ver que variables esta enviando el formulario puedes escribir:
print_r($_POST);
Esto imprimirá todas las variables que son enviadas mediante método POST.

ErM3nDa
Publicado: 03/04/2010 12:44 am

Muy util y agradable tu blog. Me gusta mucho como lo redactas.

Tambien añadir que el comentario de #1 es una absurdez… nadie escribe por mantener… mantener se mantiene con el material que ya tenga… que bien util resulta.

Como bien dijo, para escribir “mierda” mejor ir a cagar que teclear :)

Un saludo, ya tienes un lector mas, ya que me gusta ir haciendo pinitos con estas cosas y aprender cada dia mas para aplicar nuevas funcionalidades a mis sites y proyectos.

Abraham
Publicado: 07/04/2010 6:16 pm

la verdad muy bueno, apenas estoy aprendiendo y la verdad me sirvio mucho gracias, espero siga publicando este tipo apoyo :)

feber
Publicado: 29/04/2010 12:04 pm

me parece interesante ya que avemos muchas personas comensando y esta muy bien explicado.

gracias unijimpe muy interesante

javier
Publicado: 31/05/2010 11:26 pm

hola pues yo quisiera que me ayudaras para acer una busqueda en php y no puedo o no logro que me de el resultado deseado

wilfredo
Publicado: 16/06/2010 7:20 pm

Excelente! me sirvio totalmente y al 100% justo lo que buscaba xD

anthony
Publicado: 15/07/2010 5:25 pm

Mi problema es qeu ni me muestra el mensaje Registro insertado correctamente ni veo almacenado los datos en la DB..
por favor ayúdenme que es un proyecto de la universidad.

Codigo:

Codigo:

//Codigo php-----------------------------------------------------

Registro insertado correctamente

Lidia
Publicado: 22/07/2010 12:56 pm

Hola,esta muy bueno la explicación..gracias me sirvió muchísimo

jabonn
Publicado: 01/08/2010 11:34 am

Gracias, me estan sirviendo tus tutos como no imaginas.

Es mejor que ir a tomar clases!!

Muchas gracias

karakarton
Publicado: 23/08/2010 8:05 am

Todo ok, pero ¿como puedo hacer para k cuando vuelva a insertar otro dato, solo me reemplaze el k hay ?

no se si me explico,

$que = “INSERT INTO menu1 (menu1) “;
$que.= “VALUES (‘”.$_POST['nombre'].”‘) “;
$res = mysql_query($que, $conexion) or die(mysql_error());
$state = true;

hace k cada dato se vaya insertando, pero yo solo quiero un daato y si inserto otro, me reemplaze el k hay.

Me sirvieron mucho tus tutoriales, gracis y enhorbuena. -Si lguien puede resolverme esta duda se lo agradeceria

unijimpe
Publicado: 23/08/2010 10:36 pm

karakarton lo que tu estas necesitando es actualizar los datos, es decir no insertar un nuevo registro si no editarlo por uno nuevo. Para ello puedes utilizar la sentencia UPDATE de la siguiente forma:

UPDATE menu1 SET menu1 = 'Nuevo Menu' WHERE id = 5

karakarton
Publicado: 24/08/2010 3:29 am

Hola unjimpe muchisimas gracias por responder, pero si k me inserta el dato pero no me reemplaza el campo, me sigue añadiendo. Yo modifique tu tutorial, pq en la tabla solo iba un campo:

tabla menu1
campo menu1 varchar

karakarton
Publicado: 24/08/2010 4:11 am

Unknown column ‘id’ in ‘where clause’

jose_espectador
Publicado: 21/09/2010 12:52 am

Saludos cordiales. Que bien por compartir conocimiento. He hecho modificaciones y todo me marcha OK!, incluso lo estoy utilizando para una encuesta con más de 15 preguntas y me funciona lo más de bien. Sin embargo tengo una inquietud: qué sentencia debo dar para que una vez grabado un registro, además de avisarme que se hizo bien el proceso me envíe a otra dirección? Felicitaciones!

Juan
Publicado: 08/10/2010 7:47 am

una pregunta sobre el auto_increment
como se puede acer para que empiece desde otro numero

Rafa
Publicado: 02/02/2011 11:01 am

gracias por tomarte la molestia de tu post, la verdad es que no daba pie con bola, solo que ahora te agradeceria, al igual que algunos amigos que te han escrito, que nos hicieras el favor de ponernos un ejemplo de como darle mantenimiento a la base; esto es modificar, borrar y actualizar.

de antemano muchas gracias

Jemys
Publicado: 19/03/2011 5:25 pm

Muy buen aporte, me sirvió, pues estaba a punto de volverme loca, gracias

Luner
Publicado: 04/04/2011 5:40 am

Gracias.Pese al comentario #1, este post te sigue dando trabajo…trás más de 2 años!

Enhorabuena.

Bernarda marin
Publicado: 10/06/2011 5:16 pm

estimado realice todo lo que indica pero me sale un error “No database selected” cual seria el problema ya que según se , es que habría un error en mi datos de coneccion , y los he corroborado todo.

unijimpe
Publicado: 10/06/2011 11:39 pm

Bernarda, verifica que los datos de tu conexión sea la correcta. Es probable que la ruta de tu servidor MySQL no sea localhost entonces prueba colocando el IP del servidor donde se encuentra el servidor MySQL

$conexion = mysql_connect("localhost", "usuario", "clave");

Luego verifica que el nombre de la base de datos que estas utilizando sea la correcta:

mysql_select_db("demo", $conexion);

JuanDavid
Publicado: 30/06/2011 6:41 pm

unijimpe Porfavor Quiero Pedirte Tu Ayuda HIze Todo Lo Que Estaba En la GUia Y pUes cuando lleno los datos y le doy ingresar datos se queda un rato cargando y me sale este error

Fatal error: Maximum execution time of 60 seconds exceeded in C:\AppServ\www\insert-mysql.php on line 5

Puse la etiqueta o como se llame error_reporting(E_ERROR) pero no encuentro el error todo corresponde con la base de datos y el localhost tambien ayudeme porfa

David
Publicado: 16/08/2011 9:48 am

Impecable el ejemplo, soy usuario de asp, y estaba interesado en aprender lo mas basico que es un abm, y la verdad que esta muy bueno el contenido del blog y no parece que sea de relleno como dijeron por ahi.
Muchas gracias de verdad.

Roberto
Publicado: 15/09/2011 9:36 am

Hola que tal unijimpe exelente blog, tengo un problemita a la hora de enviar el registro a la bd me sale este error:
php_network_getaddresses: getaddrinfo failed: No such host is known.

quisiera que me dijeras que fue lo que hice mal

alexeins_21
Publicado: 28/09/2011 9:48 am

Magistral realmente muy pero muy bueno…. he leido tanto sobre PHP que hasta un libro me compre.. pero no se compara como lo tu BLOG… fue de gran ayuda… buena pana….. felicitaciones por tu BLOG muy preciso…

alexeins_21
Publicado: 06/10/2011 12:00 pm

Me puedes ayudar estoy tratando de implementar el eliminar pero me salen full errores…. tienes el scrip de esta consulta…?????????? seria de gran ayuda gracias…………

titicon
Publicado: 09/10/2011 11:45 pm

hola gracias por tus aportes son de gran ayuda
porfa puedes publicar uno con actualizar eliminar y pues tamen si tienes con ajax gracias

Javier Ospina
Publicado: 19/01/2012 12:40 pm

muy buen post, va sin rodeos y muy bien explicado te felicito y te agradezco.

Eduardo
Publicado: 09/05/2012 3:05 pm

hola, estoy haciendo un proyecto en php y me salta la duda, ya ingreso borro modifico datos pero consulta por consulta o linea por linea, lo que me causa un poco de duda es lo siguiente. ¿de que manera puedo ir y buscar a la base de datos traer un registro, luego este registro agregarlo a una especie de tabla temporal o algo asi del lado del cliente, y una vez seleccionados “n” numero de registros guardarlos todos los seleccionados en otra tabla? saludos a toda la comunidad espero se entienda lo que intente preguntar bye

redman
Publicado: 03/06/2012 10:10 pm

me has salvado el dia muy buen aportee

Elhackandy
Publicado: 09/06/2012 6:02 pm

Holaaa mil gracias Me re sirvio para mi script de videos que estoy haciendo mil gracias y muy buena la web sigan asi :D

josue cadena suarez
Publicado: 03/11/2012 1:26 am

hola amigo que tal muy buen aporte.. pero tengo una preguntita.. como hago para que no se me repitan mucho las filas insertadas.. osea inserto 3 vuelvo actualizar la pagina se me ingresan 3 mas de la misma y sigo actualizando y me sigue insertando la misma… podrias ayudarme con eso porfa muchas gracias de antemano

Raul
Publicado: 18/11/2012 7:57 pm

mysql_query(“INSERT INTO SistemaDeComentarios (TotalComentarios, Nombre , Apodo , Email , Pagweb, Facebook, Twitter, Edad, Sexo, Comentario, IndicadorCoR, Fecha, Hora, FotoRuta, DirCarpetaFotos)
VALUES (NULL, ‘$nombre’, ‘$apodo’ , ‘$email’ , ‘$pagweb’, ‘$facebook’, ‘$twitter’, ‘$edad’, ‘$sexo’, ‘$mensaje’, ‘$indicadorCoR’, ‘$fecha’, ‘$hora’, ‘$fotoruta’, ‘$dircarpetafotos’)”);

puede alguien decirme cual es mi error, por que php no me marca ningun error pero de tantos intentos fallido y reduciendo el margen llegue a la conclusion de que esto es lo que falla pues no inserta datos en mi base de datos y todo aparenta estar bien, ya me desespere porque no inserta los datos :/

es para una tarea que tengo que hacer para la escuela donde estudio.
mi codigo es enorme pero el error esta ahi en ese pequeño fragmento :/

jose
Publicado: 10/01/2013 9:11 am

Akgo asi estaba buscando exelente, muy practico.. lo probare y te cuento como me va

Gericault Arias
Publicado: 10/04/2013 5:51 pm

Buenas Tardes,

Mira yo hice todos los pasos y me resulta bien, el problema es que al ingresar los datos en el formulario y darle enviar me muestra datos insertados correctamente pero en la base de datos no los inserta todos..Me deja algunos espacios en blanco.

Gracias es urgente!!

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)