Llamar a un procedimiento almacenado SQL Server desde PHP

publicado por: Anonymous

Lo que quiero hacer es llamar a un procedimiento almacenado hecho en Sql Server a PHP, revisaba el manual de PHP en el cual se usa el SQLSRV me guié de ese manual pero me sale un error y la verdad no se mucho y quisiera que me ayuden.

A continuación mi código php:

<?php


include("conexion_sis.php");

      ini_set('date.Timezone','America/Lima');
      $time=date('H:i:s',time());                                                           
      $time2=date('Y-m-d',time());

      $codigo=$_POST['codigo'];
      $unidad_medida=$_POST['unidad_medida'];                                                            
      $descripcion=$_POST['descripcion'];  

      $precioUnitario=$_POST['precioUnitario'];

      $myparams['CodigoArticulo'] = $codigo;
      $myparams['Descripcion'] = $descripcion;
      $myparams['UnidadMedida'] = $unidad_medida;
      $myparams['TipoExistencia'] = 0;
      $myparams['FechaVigencia'] =$time2;
      $myparams['EmpId'] = 3;
      $myparams['NumDocto'] = 3;
      $myparams['Item'] = 3;
      $myparams['PrecioUnitario'] = $precioUnitario;

      $procedure_params = array(
            array(&$myparams['CodigoArticulo'], SQLSRV_PARAM_OUT),
            array(&$myparams['Descripcion'], SQLSRV_PARAM_OUT),
            array(&$myparams['UnidadMedida'], SQLSRV_PARAM_OUT),
            array(&$myparams['TipoExistencia'], SQLSRV_PARAM_OUT),
            array(&$myparams['FechaVigencia'], SQLSRV_PARAM_OUT),
            array(&$myparams['EmpId'], SQLSRV_PARAM_OUT),
            array(&$myparams['NumDocto'], SQLSRV_PARAM_OUT),
            array(&$myparams['Item'], SQLSRV_PARAM_OUT),
            array(&$myparams['PrecioUnitario'], SQLSRV_PARAM_OUT)

            );


      $sql = "exec Usp_Usp_Insertar_Productos @CodigoArticulo=?,@Descripcion=?,@UnidadMedida=?,TipoExistencia=?,FechaVigencia=?,@EmpId=?,@NumDocto=?,@Item=?,@PrecioUnitario=?";
      $stmt = sqlsrv_prepare($con, $sql, $procedure_params);

      if( !$stmt ) {
            die( print_r( sqlsrv_errors(), true));
            }

            if(sqlsrv_execute($stmt)){
              while($res = sqlsrv_next_result($stmt)){
                // make sure all result sets are stepped through, since the output params may not be set until this happens
              }
              // Output params are now set,
              print_r($params);
              print_r($myparams);
            }else{
              die( print_r( sqlsrv_errors(), true));
            }
?>

Mi error:

 1Array
(
    [0] => Array
        (
            [0] => 42000
            [SQLSTATE] => 42000
            [1] => 102
            [code] => 102
            [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Sintaxis incorrecta cerca de '='.
            [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Sintaxis incorrecta cerca de '='.
        )

    [1] => Array
        (
            [0] => 42000
            [SQLSTATE] => 42000
            [1] => 8180
            [code] => 8180
            [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]No se puede preparar la instrucción o instrucciones.
            [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]No se puede preparar la instrucción o instrucciones.
        )

)

solución

El mensaje de error indica que hay un error cerca de un signo =. Los mensajes de error de SQL Server suelen ser así, así que hay que entrenarse a interpretarlos.

Leyendo tu sentencia, me he dado cuenta que tienes 2 parámetros sin el signo @, que son TipoExistencia, y ‘FechaVigencia’ y por ello es el error, con esto debiera resolverse:

$sql = "exec Usp_Usp_Insertar_Productos @CodigoArticulo=?,@Descripcion=?,@UnidadMedida=?,@TipoExistencia=?,@FechaVigencia=?,@EmpId=?,@NumDocto=?,@Item=?,@PrecioUnitario=?";
Respondido por: Anonymous

Leave a Reply

Your email address will not be published.