Nueva pregunta

Pregunta:

Fecha: 06-09-2017 08:30:26 (En Inglés)

PDO y bindParam()[No resuelta]

Que tal amigos acudo a ustedes por que tengo la siguiente duda: Tengo un query y usando PDO de php pongo de la siguiente forma (lo haré con un query de ejemplo):


$anio = 1997;
$nombres = " 'ruben','jorge','armando' ";
$sql = "
SELECT 
 *
FROM tabla
WHERE anio = :anio AND nombres IN ( :nombres )
";

$query = $pdoaux->prepare($sql);

$query->bindParam(':anio',$anio);
$query->bindParam(':anio',$nombres);
$query->execute();
$resp = $query->fetchAll();



El problema aqui es con el parametro nombres, que no me esta respetando ese parametro y mi duda es si lo tengo que enviar como array o en que formato ya que es en un IN, espero su ayuda gracias
Etiquetas: Votos: 0 - Respuestas: 7 - Vistas: 11 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 06-09-2017 12:25:30 Hola Ruben,
    Puedes hacer lo siguiente:

    $anio = 1997;
    $nombres = ['ruben','jorge','armando'];
    $sql = "
    SELECT 
     *
    FROM tabla
    WHERE anio = :anio AND nombres IN ( " . implode(', ', array_fill(0, count($nombres), '?')) . " )
    ";
    
    $query = $pdoaux->prepare($sql);
    
    $query->bindParam(':anio',$anio);
    foreach ($nombres as $index=>$nombre) {
        $query->bindParam($index, $nombre, PDO::PARAM_STR);
    }
    $query->execute();
    $resp = $query->fetchAll();
    
    


    Ojalá te sirva.

    Saludos
      Votos: 0 - Link respuesta
     
  • Fecha: 07-09-2017 07:33:50 Gracias por la respuesta Ernesto, no me funciona me manda error por la cantidad de parametros pero sigo buscando la falla   Votos: 0 - Link respuesta
     
  • Fecha: 07-09-2017 07:39:35 Ruben, podrías compartir el mensaje de error?   Votos: 1 - Link respuesta
     
  • Fecha: 07-09-2017 08:08:54 Si claro mira es el siguiente:


    Warning: PDOStatement::bindParam(): SQLSTATE[HY093]: Invalid parameter number: Columns/Parameters are 1-based in /var/www/intranet/mod_motorola_reportes/lista_reporte_produccion_detalle.php on line 22 Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in /var/www/intranet/mod_motorola_reportes/lista_reporte_produccion_detalle.php on line 24
      Votos: 0 - Link respuesta
     
  • Fecha: 07-09-2017 08:47:43 A ver intenta con este:

    $index = 0;
    $anio = 1997;
    $nombres = ['ruben','jorge','armando'];
    $sql = "
    SELECT 
     *
    FROM tabla
    WHERE anio = ? AND nombres IN ( " . implode(', ', array_fill(0, count($nombres), '?')) . " )
    ";
    $query = $pdoaux->prepare($sql);
    $query->bindParam($index, $anio, PDO::PARAM_STR);
    foreach ($nombres as $nombre) {
        $query->bindParam(++$index, $nombre, PDO::PARAM_STR);
    }
    $query->execute();
    $resp = $query->fetchAll();
    
      Votos: 0 - Link respuesta
     
  • Fecha: 08-09-2017 07:06:07 Mandó el mismo error   Votos: 0 - Link respuesta
     
  • Fecha: 11-09-2017 07:41:16 en vez de un foreach prefiero hacer algo como:
    call_user_func_array(array($stmt, "bind_param"), array_merge(array($types), $params));

    internamente debe hacer lo mismo pero se ve mejor a mi parecer :)
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com