Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] bindParam en un ciclo, se puede?

Estas en el tema de bindParam en un ciclo, se puede? en el foro de PHP en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original for ( $i = 0 ; $i < count ( $camposextras ) ; $i ++ ) { //   ...
  #1 (permalink)  
Antiguo 13/04/2020, 23:15
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 12 años, 3 meses
Puntos: 52
bindParam en un ciclo, se puede?

Código PHP:
Ver original
  1. for($i = 0;$i < count($camposextras); $i++){
  2. //        echo $_POST["chk_".$camposextras[$i]];
  3.         if(isset($_POST["chk_".$camposextras[$i]])){
  4.             $siono="SI";
  5.                
  6.         }else{
  7.             $siono="NO";
  8.         }
  9.         echo "siono=".$siono."<br>";
  10.         $campo = ":".$camposextras[$i];
  11.         echo "campos=".$campo.",".$siono."<br>";
  12.         $query->bindParam($campo,$siono);
  13.        
  14.          
  15.     }
resultado
siono=SI
campos=:talla,SI
siono=NO
campos=:color,NO
es PDO
y el problema es que me guarda el ultimo valor de $siono en todos los campos que vienen por post

ACTUALIZACION

lo cambie asi

Código PHP:
Ver original
  1. if(isset($_POST["chk_color"])){
  2.             $siono="SI";
  3.                
  4.         }else{
  5.             $siono="NO";
  6.         }        
  7.         $query->bindParam(":color",$siono);
  8.  
  9.         if(isset($_POST["chk_talla"])){
  10.             $siono="SI";
  11.                
  12.         }else{
  13.             $siono="NO";
  14.         }        
  15.         $query->bindParam(":talla",$siono);

y sigue haciendo lo mismo
de antemano gracias
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 13/04/2020 a las 23:24
  #2 (permalink)  
Antiguo 13/04/2020, 23:53
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 12 años, 3 meses
Puntos: 52
Respuesta: bindParam en un ciclo, se puede?

No se por que razon tengo que usar una variable diferente para cada campo.. tuve que cambiar el $siono segundo por $siono2
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #3 (permalink)  
Antiguo 14/04/2020, 08:38
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: bindParam en un ciclo, se puede?

Revisa el manual: https://www.php.net/manual/es/pdosta....bindparam.php

Para entender mejor el comportamiento de esto, lo que enlazas es la variable y no su valor:

Código PHP:
Ver original
  1. $siono = '';
  2.     $query->bindParam(':siono', $siono); // Asignaste una cadena vacía?
  3.     // No, asignaste una variable que, por ahora, es una cadena vacía
  4.  
  5.     $siono = 'Sí'; // Esto actualizará el valor enlazado
  6.     // Todos los cambios a esta variable seguirán afectando ese valor

Si usas la misma variable para varios parámetros, todos tendrán el mismo valor.

Lo que puedes hacer es armar un array con los parámetros y enviarlo al ejecutar la consulta, en lugar de enlazar:

Código PHP:
Ver original
  1. $params = [];
  2. for($i = 0;$i < count($camposextras); $i++){
  3. //        echo $_POST["chk_".$camposextras[$i]];
  4.         if(isset($_POST["chk_".$camposextras[$i]])){
  5.             $siono="SI";
  6.                
  7.         }else{
  8.             $siono="NO";
  9.         }
  10.         echo "siono=".$siono."<br>";
  11.         $campo = ":".$camposextras[$i];
  12.         echo "campos=".$campo.",".$siono."<br>";
  13.         $params[":$campo"] = $siono;
  14. }
  15.  
  16. // Después ejecutas la consulta
  17. $query->execute($params);
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 14/04/2020, 10:23
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años, 6 meses
Puntos: 120
Respuesta: bindParam en un ciclo, se puede?

Cita:
Iniciado por Triby Ver Mensaje
Revisa el manual: https://www.php.net/manual/es/pdosta....bindparam.php

Para entender mejor el comportamiento de esto, lo que enlazas es la variable y no su valor:
.......
acotando un poco la respuesta de triby, el metodo bindParam de PDO, usa variable POR REFERENCIA, una variable por referencia, esta ligada al area de memoria de esta, las variables por Referencia, usan la misma memoria , en resumen
si tienes este codigo
Código PHP:
  $a='soy, area de memoria';
  $b = &$a;
  $c = &$b;
<?php

  $a
='soy, area de memoria';
  
$b = &$a;
  
$c = &$b;

$c='soy valor de C';

echo 
var_export(array(
    
'valor de A'=>$a,
    
'valor de B'=>$b,
    
'valor de C'=>$c
));
con ese ejemplo ,cuando no se sabe sobre variables por referencia, esperaras un resultado similar a
Código resultado:
Ver original
  1. array (
  2.   'valor de A' => 'soy, area de memoria',
  3.   'valor de B' => 'soy, area de memoria',
  4.   'valor de C' => 'soy valor de C',
  5. )

pero al ser Referenciados las variables $b,$c y todos apuntan la misma area de memoria (PUNTERO) el resultado que te arroja sera
Código resultado:
Ver original
  1. array (
  2.   'valor de A' => 'soy valor de C',
  3.   'valor de B' => 'soy valor de C',
  4.   'valor de C' => 'soy valor de C',
  5. )
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #5 (permalink)  
Antiguo 14/04/2020, 17:46
 
Fecha de Ingreso: diciembre-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 4
Respuesta: bindParam en un ciclo, se puede?

Código PHP:

for($i 0$j count($camposextras); $i $j$i++) {
    
$siono = (isset($_POST['chk_' $camposextras[$i]])) ? 'SI' 'NO';
    echo 
'siono=' $siono '<br>';
    
$campo ':' $camposextras[$i];
    echo 
'campos=' $campo ',' $siono '<br>';
    
$query->bindValue($campo$siono);

  #6 (permalink)  
Antiguo 14/04/2020, 20:11
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 12 años, 3 meses
Puntos: 52
Respuesta: bindParam en un ciclo, se puede?

Si me di cuenta, Agarra el ultimo valor, tuve que poner una variable por cada campo.. muchas gracias :)
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Etiquetas: Ninguno
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:16.