AnswerBun.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!

Related Questions

no me funciona AJAX de jquery

1  Asked on November 15, 2021

     

OpenCV Assertion failed size.width>0 && size.height>0

1  Asked on November 15, 2021 by minihack

   

Cómo desarrollar un programa que cambie las entre las ventanas de Windows

0  Asked on November 15, 2021 by andeman-cervantes

   

Laravel login hecho por mi mismo no funciona (Error 404)

0  Asked on November 15, 2021 by shredder

   

crear cupon en laravel

1  Asked on November 13, 2021 by arthuro-alvarezz

     

Cómo setear el state con un array?

1  Asked on November 13, 2021

       

Problema con servicio de nodejs al descargar

1  Asked on November 13, 2021 by carlos-cuellar

     

Error de llenado array con Foreach Java

2  Asked on November 13, 2021 by user180162

     

Ejecutar codigo PHP dentro de Javascript

5  Asked on November 13, 2021

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir