es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valor de retorno de una consulta sqlsrv utilizando un procedimiento almacenado

Tengo problemas para obtener el valor de un resultado de una consulta. Retorna el número de filas (1) del resultado pero no el valor de esa fila, este es mi código php:

“`php
if(isset($<em>POST['procesar'])){
$fechaDesde = $</em>POST['fechaDesde'];
$fechaHasta = $<em>POST['fechaHasta'];
//$query ="SELECT SUM(precioProducto) from ventas where fecha</em>de<em>venta BETWEEN '$fechaDesde' and '$fechaHasta'";
$query ="{call [dbo].[mostrar</em>total<em>ventas] (?,?)}";
$resultado = sqlsrv</em>query($con, $query, $params);
$resultados = sqlsrv_query($con, $query, $params);
echo('<br />');

<pre><code>if ($resultado !== NULL){
$rows = sqlsrv_has_rows($resultado);
if ($rows = true){
print_r($rows);
}
}
}
</code></pre>

<code>y este es mi procedimiento almacenado:</code>
sqlsrv
alter proc mostrar<em>total</em>ventas
@fechaDesde datetime,
@fechaHasta datetime
as
SELECT SUM(precioProducto) as Ventas from ventas
where fecha<em>de</em>venta BETWEEN @fechaDesde and @fechaHasta
“`

Me gustaría que mi código php muestre el resultado del procedimiento almacenado.

Edité: Agregué estas líneas a mi código y el resultado de ambos var_dumps es NULL:

php
if(sqlsrv_has_rows($resultado)){
while($row = sqlsrv_fetch_array($resultado,)){
var_dump($row[0]);
var_dump($row['Ventas']);
}
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor del resultado de una consulta, es necesario utilizar el método fetch después de ejecutarla. En este caso, dado que estás utilizando SUM en tu procedimiento almacenado, puedes utilizar sqlsrv_fetch_array para obtener el valor de las ventas totales.

    Así es cómo puedes modificar tu código PHP para mostrar el resultado del procedimiento almacenado:

    if(isset($_POST['procesar'])){
        $fechaDesde = $_POST['fechaDesde'];
        $fechaHasta = $_POST['fechaHasta'];
        $query = "{call [dbo].[mostrar_total_ventas] (?,?)}";
        $params = array($fechaDesde, $fechaHasta);
        $resultado = sqlsrv_query($con, $query, $params);
        echo('<br>');
    
        if ($resultado !== false){
            if(sqlsrv_fetch($resultado) !== false){
                $ventas = sqlsrv_get_field($resultado, 0);
                echo "Ventas totales: $ventas";
            }
        }
    }
    

    Algunas cosas a tener en cuenta:
    – Solo necesitas ejecutar el procedimiento almacenado una vez, por lo que no necesitas usar $resultados.
    – Necesitas pasar los parámetros fechaDesde y fechaHasta al procedimiento almacenado, por lo que tienes que crear un array con estos valores y pasarlo como segundo parámetro a sqlsrv_query.
    – Después de verificar si hay filas, es necesario utilizar sqlsrv_fetch para mover el cursor a la primera fila, y luego utilizar sqlsrv_get_field para obtener el valor del primer campo (en este caso, la SUMA de precioProducto).
    – Luego puedes mostrar este valor utilizando echo en tu salida.

Comments are closed.