Foros del Web » Programando para Internet » PHP »

condiciones de inserción

Estas en el tema de condiciones de inserción en el foro de PHP en Foros del Web. Hola Bueno, mis conocimientos de php no son muy grandes y me encuentro con un problema que imagino será de fácil solución.. Tengo una consulta ...
  #1 (permalink)  
Antiguo 15/02/2006, 06:37
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
condiciones de inserción

Hola

Bueno, mis conocimientos de php no son muy grandes y me encuentro con un problema que imagino será de fácil solución..

Tengo una consulta hecha para insertar una serie de datos en una db:

$result = mysql_query("insert into tabla (campo1,campo2,campo3,campo4) values ('$variable1','$variable2', '$variable3','$variable4')", $link)

PERO solo quiero que se haga esa inserción WHERE el campo2 tenga una serie de valores..... Vaya, si es un solo valor he probado y si me sale bien pero al tratarse de varios valores no se bien como realizar la consulta..

Gracias por la ayuda
  #2 (permalink)  
Antiguo 15/02/2006, 07:02
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
$sql="insert into tabla (campos) values (valores) where campo2 in (val1,val2,val3)";
  #3 (permalink)  
Antiguo 15/02/2006, 07:11
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
Igual me da error.. Bien, he puesto exactamente:

$result = mysql_query("insert into tabla (campo1,campo2,campo3,campo4) values ('$variable1','$variable2', '$variable3','$variable4') where campo2 in (val1,val2,val3)", $link) or die (mysql_error());
;

Y el resultado es:

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 'where campo2 in (val1,val2,val3)' at line 1
  #4 (permalink)  
Antiguo 15/02/2006, 07:17
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
que version de mysql tienes? de que tipo es el campo2?
  #5 (permalink)  
Antiguo 15/02/2006, 07:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
OJO .. por qué el ejemplo de claudiovega sobre "val1,val2,val3" .. no es que lo pongas "literal" sino que ahí pongas tus valores ..separados por comas y si son "string" (cadenas) esos datos .. ponlos entre comillas:

Código PHP:
<?
$result 
mysql_query("insert into tabla (campo1,campo2,campo3,campo4) values ('$variable1','$variable2', '$variable3','$variable4') where campo2 in ('blabla','otrodato','otrovalor')"$link) or die (mysql_error());
;
Un saludo,
  #6 (permalink)  
Antiguo 15/02/2006, 09:18
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
La versión es la 4.3 y el campo es de texto, varchar...

Si, claro entiendo lo del "val1,val3, val2" de todas formas aun introduciendo "val1,val2,val3" imagino que no debería dar error simplemente no se insertaría nada al no conicidir los valores...
  #7 (permalink)  
Antiguo 15/02/2006, 09:49
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Da error de sintaxis siempre que colocas un dato texto a un campo numerico, no se porque.
  #8 (permalink)  
Antiguo 15/02/2006, 10:40
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
Perdona, como dije no soy precisamente experto en esto... ¿Me quieres decir que varchar es un campo numerico y que debo cambiar el tipo de campo si voy a utilizar texto para que esto funcione?

Gracias
  #9 (permalink)  
Antiguo 15/02/2006, 11:38
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
NO, varchar es de texto, y debes usar comillas simples (') cuando colocas los valores a los campos o cuando los comparas con un arreglo de valores. Esto: ('valor1','valor2') es una arreglo de valores sql, donde los valores a comparar con el campo son de tipo texto, el campo debe ser de texto tambien. Si el campo es numerico debes compararlo con un array sql de campos numerico, asi: where camponum in (44,55,66).
  #10 (permalink)  
Antiguo 15/02/2006, 12:20
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
Si, con la comilla simple he probado también.. La verdad es que he revisado todas las variantes y no me funciona con ninguna... Da el mismo error siempre.

Por si afecta en algo decir que los datos se obtienen de una consulta anterior con:

while($row=mysql_fetch_assoc($result)) {

Vaya, todo funciona bien si inserto todos los registros por lo que la primera parte está bien... Solo da error cuando intento que se inserten solo los registros que en el campo2 su valor es valor1,valor2,valor3...

No se si esto del while afecta y haya que hacerlo de otra forma...
  #11 (permalink)  
Antiguo 15/02/2006, 12:57
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Pon ese código sql en una variable y luego imprímela por pantalla, después muéstranos el resultado que aparace en pantalla para ver completa la instrucción sql y tratar de descubrir que está mal
  #12 (permalink)  
Antiguo 15/02/2006, 16:33
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
No se exactamente lo que me quieres decir... VAya al ejecutar el código que aparece es:

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 'where campo2 in (val1,val2,val3)' at line 1

No se exactamente como hacer lo que me indicas.....
  #13 (permalink)  
Antiguo 15/02/2006, 20:10
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Haz esto:

Código PHP:
<?php
   
//guardo en una variable la sentencia sql
   
$sql "insert into tabla (campo1,campo2,campo3,campo4) values ('$variable1','$variable2', '$variable3','$variable4') where campo2 in ('$valor1','$valor2', '$valor3')";

   
//la muestro por  pantalla
   
echo $sql;

   
$result mysql_query($sql$link) or die(mysql_error());
?>
Luego postea el resultado de: echo $sql; que aparecerá en pantalla.
  #14 (permalink)  
Antiguo 16/02/2006, 02:50
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
Me temo que el mensaje que da no aclara mucho:

insert into tabla (nombre,servicio,periodo,vencimiento) values ('demo','demo','trimestral','2006-03-03') where periodo in ('mensual','anual')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 'where periodo in ('mensual','anual')' at line 1
  #15 (permalink)  
Antiguo 16/02/2006, 06:26
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 10 meses
Puntos: 1
¿Se puede usar una clausula WHERE dentro de un INSERT? ¿Porque no verificas el valor de "$variable2" antes de hacer la inserción? Yo haría así:

Código PHP:

$valores 
= array("val1","val2","val3");
...
if (
in_array($variable2$valores)) {
$result mysql_query("insert into tabla (campo1,campo2,campo3,campo4) values ('$variable1','$variable2', '$variable3','$variable4')"$link);

Saludos
__________________
¿Se me entiende la letra?
  #16 (permalink)  
Antiguo 16/02/2006, 10:29
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Tienes razón, la sintaxis de insert no lleva where.
  #17 (permalink)  
Antiguo 16/02/2006, 10:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Parece que habría que ver en los foros de BBDD ..

Según describe la sintax de INSERT hay algo al parecer (no lo he usado nunca .. tampoco lo he leido en profundidad):

http://dev.mysql.com/doc/refman/5.1/...rt-select.html

Un saludo,
  #18 (permalink)  
Antiguo 16/02/2006, 10:49
 
Fecha de Ingreso: enero-2006
Mensajes: 71
Antigüedad: 18 años, 10 meses
Puntos: 0
Bien, con lo de JorgitoAlfajor ha quedado resuelto ya funciona.

Muchas gracias a todos por la ayuda
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 13:11.