Durante una inscripción en línea, un cliente puede seleccionar una serie de programas para los que elige inscribirse. Estos programas son enteros de tres dígitos y se almacenan en una matriz.Cómo insertar una matriz en una única declaración preparada de MySQL con PHP y PDO
Por ejemplo:
Quiero inscribirse en programid 155, 165, 175 y 185.
Mi matriz esté configurada tan simple como:
$data = array();
$data[] = 155;
$data[] = 165;
$data[] = 175;
$data[] = 185;
Cuando llega el momento para insertar esta información en la tabla asociada, también incluyo elementos adicionales de la otra parte de la inscripción:
Por ejemplo, si estuviera haciendo un inserto del programa SINGLE declaración temperatura ambiente, se vería de la siguiente manera:
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, 155));
Me normalmente crear un bucle simple para la matriz por encima de lo que exigiría varias instancias de la instrucción SQL y ejecutar tales como:
for($j = 0; $j < (count($data)-1); $j++) {
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, $data[$j]));
}
hago se da cuenta de que el código anterior no es válido ($ data [$ j]) pero está buscando la forma correcta de hacer la llamada.
También me han dicho antes que la construcción de una única declaración SQL dinámica es en general mejor que las llamadas múltiples como la anterior. Mi primer paso sería algo así como:
$sql = array();
foreach($data as $row) {
$sql[] = '("'.$memberid.'", "'.$row[$j].'", NOW()")';
}
mysql_real_query('INSERT INTO table (memberid, programid) VALUES '.implode(',', $sql));
pero con DOP No estoy muy seguro de cómo funciona esto, especialmente con marcadores de posición (?).
¿Alguna sugerencia?
no se corre el preparar más de una vez. Uno está preparado, puede ejecutarlo varias veces con diferentes valores. – Powerlord