Stack Overflow en español Asked by Sergio on November 27, 2020
Tengo el siguiente código:
foreach ($arrayCambiosMS as $key => $value) {
$querySelectMSdiffIdPedido="SELECT * FROM pedidos WHERE IdPedido='$value'";
$ejecMS=odbc_exec($conMSAccess, $querySelectMSdiffIdPedido);
$datosToInsertMySQL=odbc_fetch_row($ejecMS);
// $resultadoToInsertMySQL=odbc_result($datosToInsertMySQL);
}
echo $datosToInsertMySQL;
Realmente ya casi lo tengo pero estoy fallando en algo y no sé el qué. Así como está, el resultado que obtengo es un "1" y si descomento la última línea del código éste es el error que recibo:
Warning: odbc_result() expects exactly 2 parameters, 1 given
Básicamente, para que comprendáis la lógica, arrayCambiosMS es un array dónde tengo varios IdPedido y con la consulta lo que quiero sacar es todos los campos de cada registro IdPedido de la tabla de MSAccess. Luego esa variable intermedia (ese array con todos los datos) lo insertaré en MySQL. Muchas gracias.
Usa odbc_fetch_array()
para no tener que usar odbc_result()
.
El problema real está en la lógica, porque parece que quieres obtener más de un registro, pero estás sobrescribiendo la variable $datosToInsertMySQL
en cada iteración y haciendo echo solo al salir.
Así como lo tienes, puedes usar la variable dentro del ciclo, pero recuerda que odbc_fetch_array()
te va a devolver un arreglo y con echo
solo mostraría algo como Array.
foreach ($arrayCambiosMS as $key => $value) {
$querySelectMSdiffIdPedido="SELECT * FROM pedidos WHERE IdPedido='$value'";
$ejecMS=odbc_exec($conMSAccess, $querySelectMSdiffIdPedido);
$datosToInsertMySQL = odbc_fetch_array($ejecMS);
// Mostrar lo que se obtuvo
var_dump($datosToInsertMySQL);
// Aquí mismo puedes realizar la inserción de este registro en MySQL
}
Ahora, si prefieres acumular todos los registros para insertarlos posteriormente, necesitas crear un arreglo:
// Definir arreglo
$datosToInsertMySQL = [];
foreach ($arrayCambiosMS as $key => $value) {
$querySelectMSdiffIdPedido="SELECT * FROM pedidos WHERE IdPedido='$value'";
$ejecMS=odbc_exec($conMSAccess, $querySelectMSdiffIdPedido);
// Agregar registro al arreglo
$datosToInsertMySQL[] = odbc_fetch_array($ejecMS);
}
// Recorrer para insertar
foreach($datosToInsertMySQL as $datos) {
// Aquí insertas el registro en MySQL
}
Correct answer by Triby on November 27, 2020
La advertencia es clara: odbc_result() expects exactly 2 parameters, 1 given
indica que odbc_result()
espera 2 parámetros y le estás pasando solamente uno. El uso de odbc_result()
está claramente explicado en el Manual de PHP.
Además de eso, viendo que tu código ocurre dentro de un bucle foreach
, tu variable $resultadoToInsertMySQL
guardará solamente el último resultado encontrado. Si quieres que se guarden todos los resultados que se encuentren dentro del foreach
deberás declarar esa variable como array y usarla como tal.
Tu código podría quedar corregido así:
$resultadoToInsertMySQL=array();
foreach ($arrayCambiosMS as $key => $value) {
$querySelectMSdiffIdPedido="SELECT * FROM pedidos WHERE IdPedido='$value'";
$ejecMS=odbc_exec($conMSAccess, $querySelectMSdiffIdPedido);
$datosToInsertMySQL=odbc_fetch_row($ejecMS);
/*
1. Ponemos [] para ir llenando un array con los resultados
2. Ponemos el segundo parámetro a odbc_result
Como indica el Manual (ver enlace arriba) puedes poner
el número de la columna o el nombre
*/
$resultadoToInsertMySQL[]=odbc_result($datosToInsertMySQL,1);
}
print_r($resultadoToInsertMySQL);
Podrías obtener todas las filas en una sola consulta (omitiendo el bucle foreach
y una ejecución de query
por cada valor de array, si construyeses una lista separada por comas con cada valor y la pasaras como criterio WHERE IdPedido IN ( ... aquí la lista ...) ...
, para más detalles sobre el uso de WHERE IN()
puedes consultar la documentación de SQL Access.
Answered by A. Cedano on November 27, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP