TransWikia.com

Consultar datos de una tabla MS Access y guardar los datos en una variable PHP

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.

2 Answers

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);

Recomendación

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP