Vinculación de múltiples valores en pdo

3 minutos de lectura

Vinculacion de multiples valores en pdo
Yousuf Memón

¿Hay una manera fácil de vincular múltiples valores en PDO sin repetición? Echa un vistazo al siguiente código:

$result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)");

$result_set->bindValue(':username', '~user');
$result_set->bindValue(':password', '~pass');
$result_set->bindValue(':first_name', '~John');
$result_set->bindValue(':last_name', '~Doe');

$result_set->execute();

Aquí, vinculé los valores de forma repetida, 4 veces. Entonces, ¿hay una manera fácil de vincular múltiples valores en PDO?

1646749686 466 Vinculacion de multiples valores en pdo
jeremy

Siempre puede enlazar valores dentro de los argumentos de execute() siempre que esté de acuerdo con que los valores se traten como PDO::PARAM_STR (cuerda).

$result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)");
$result_set->execute(array(
    ':username' => '~user',
    ':password' => '~pass',
    ':first_name' => '~John',
    ':last_name' => '~Doe'
));

Puede usar la matriz pasada como cualquier matriz:

$user = "Nile";
$pdo->execute(array(":user" => $user));

  • ¿Cómo es esto válido? los execute método no toma ningún parámetro?

    – Brett

    25 de enero de 2016 a las 15:20

  • @Brett, ¿has revisado las especificaciones? lo hace… para pasar parámetros a la consulta, puede usar PDOStatement::bindParam() o páselo como un parámetro a través del execute() método.

    – jeremy

    25 de enero de 2016 a las 15:22


  • Mala mía, estaba pensando que estabas hablando esta.

    – Brett

    25 de enero de 2016 a las 15:26


  • No estoy seguro de por qué dice que lo tratará como una cadena porque creo que si emite los valores, no debería tratarlos como cadenas, sino como lo que se convierte, ¿no?

    – mw509

    21/10/2021 a las 23:30


  • @ mw509 la documentación (php.net/manual/en/pdostatement.execute.php) lo especifica con respecto a PDO::PARAM_STR

    – jeremy

    20 dic 2021 a las 23:47

Si desea vincular según el tipo (cadena, int, etc.), entonces no. Si está de acuerdo con vincular todo como una cadena:

$stmt = $db->prepare("...");
$stmt->execute(array(
    'foo' => 'bar',
    'something' => 'else',
    'third' => 'thing',
));

  • ¿Funcionará esto con variables si cambié? bar para $bar en el que una cadena de 'bar' es asignado ?

    – Yousuf Memón

    10 de septiembre de 2012 a las 2:35


1646749687 234 Vinculacion de multiples valores en pdo
ecuación

Para realmente nunca escribir nada dos veces, puede usar una matriz para proporcionar los datos y usar una función en esa misma matriz para generar la parte de enlace de la consulta MySQL. Por ejemplo:

function bindFields($fields){
    end($fields); $lastField = key($fields);
    $bindString = ' ';
    foreach($fields as $field => $data){ 
        $bindString .= $field . '=:' . $field; 
        $bindString .= ($field === $lastField ? ' ' : ',');
    }
    return $bindString;
}

Los datos y los nombres de las columnas provienen de una sola matriz asociativa ($data). Entonces, usa bindFields($data) para generar una cadena de column = :column pares para concatenar en la consulta MySQL:

$data = array(
    'a_column_name' => 'column data string',
    'another_column_name' => 'another column data string'
);

$query = "INSERT INTO tablename SET" . bindFields($data);

$result = $PDO->prepare($query);
$result->execute($data);

bindFields($data) producción:

 a_column_name=:a_column_name,another_column_name=:another_column_name 

  • Originalmente había publicado esto como una pregunta/respuesta separada (aquí) antes de encontrar esta pregunta, pero ahora la he marcado como un duplicado.

    – ecuación

    25 de abril de 2014 a las 16:44

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad