Jump to content

Commands out of sync (MYSQL)... me tiene chato...


Recommended Posts

Estimados amigos, nuevamente por aqui.... tengo la siguiente consulta que hacerles.

estoy tratando de ejecutar varias sentencias SQL, son dos consultas y dos insert, que he hecho, estan en Store Procedure, pero me da el error de cual les estoy hablando, especificamente en la ultima sentencia, que es de insert, o sea, este error:

Commands out of sync; you can't run this command now

La primera sentencia SQL:

$buscar = sprintf("select * from productos where productCodBarras = '$codBar'");
    $ejecBusca = mysql_query($buscar) or die("Error1: ".mysql_error());
    $existe = mysql_num_rows($ejecBusca);
    mysql_free_result($ejecBusca);

 

Segunda:

$insertar = mysql_query("call sp_InsertProd('$codBar',$famID,'$nombre','$fecAlta',$marcaID,$costNeto,$ivaID,$precVen,$exen,$gestEnv)") or die("Error2: ".mysql_error());

 

Tercera

selec = mysql_query("call sp_BuscarIdProd('$codBar')") or die("Error3: ".mysql_error());        
            while($fila=mysql_fetch_array($selec)){
                $idProd = intval($fila['productID']);
                echo "Codigo Producto: ".$idProd."<br>";
            }
            mysql_free_result($selec);

 

Y finalmente... La cuarta, que es la que me está dando problemas....

$inserStoc = mysql_query("call sp_InsertStock($idProd,$stock,'$fecAlta',$stockMin)") or die("Error4: ".mysql_error());

 

Codigo completo de la pagina...


<?php
    require_once("../prueba.php");
    $con = conectar();
    
    $codBar = mysql_real_escape_string($_POST['codBar']);
    $famID = intval($_POST['famID']);
    $nombre = mysql_real_escape_string($_POST['nombre']);
    $fecAlta = $_POST['fecAlta'];
    $marcaID = intval($_POST['marcaID']);
    $costNeto = doubleval($_POST['costNeto']);
    $ivaID = intval($_POST['ivaID']);
    $precVen = doubleval($_POST['precVen']);
    $stock = doubleval($_POST['stock']);
    $stockMin = doubleval($_POST['stockMin']);
    $exen = intval($_POST['exen']);
    $gestEnv = intval($_POST['gestEnv']);
    $idProd = 0;
    
    $buscar = sprintf("select * from productos where productCodBarras = '$codBar'");
    $ejecBusca = mysql_query($buscar) or die("Error1: ".mysql_error());
    $existe = mysql_num_rows($ejecBusca);
    mysql_free_result($ejecBusca);
    if($existe > 0){
?>
    <h1 align="center" class="colorLetra">PRODUCTO YA EXISTE</h1>
<?php
    }else{
        $insertar = mysql_query("call sp_InsertProd('$codBar',$famID,'$nombre','$fecAlta',$marcaID,$costNeto,$ivaID,$precVen,$exen,$gestEnv)") or die("Error2: ".mysql_error());
        
        if($insertar){
            $selec = mysql_query("call sp_BuscarIdProd('$codBar')") or die("Error3: ".mysql_error());        
            while($fila=mysql_fetch_array($selec)){
                $idProd = intval($fila['productID']);
                echo "Codigo Producto: ".$idProd."<br>";
            }
            mysql_free_result($selec);
        }
    $inserStoc = mysql_query("call sp_InsertStock($idProd,$stock,'$fecAlta',$stockMin)") or die("Error4: ".mysql_error());
    
?>
    <h1 align="center" class="colorLetra">PRODUCTO INGRESADO CORRECTAMENTE</h1>
<?php
    
    }
    mysql_free_result($existe);
    mysql_close($con);
?>

 

Gracias a todos por su pronta ayuda.... :nopuedeser:

Link to comment
Share on other sites

Bueno... dicen que MySqli es para versión PHP 5.x+ y MySql 4.1+...

Este es un extracto de lo que dice aquí

 

 

 

What is PHP's mysqli Extension?

 

The mysqli extension, or as it is sometimes known, the MySQL improved extension, was developed to take advantage of new features found in MySQL systems versions 4.1.3 and newer. The mysqli extension is included with PHP versions 5 and later.

 

The mysqli extension has a number of benefits, the key enhancements over the mysql extension being:

 

* Object-oriented interface

* Support for Prepared Statements

* Support for Multiple Statements

* Support for Transactions

* Enhanced debugging capabilities

* Embedded server support

 

Note: If you are using MySQL versions 4.1.3 or later it is strongly recommended that you use this extension.

 

As well as the object-oriented interface the extension also provides a procedural interface.

 

 

 

Salu2.

Edited by ragys
Link to comment
Share on other sites

Hola

 

Primero, estas usando un estilo de programacion de la epoca de las cavernas.

Es muy poco escalable y mantenible.

 

En estos tiempos es imprecindible usar alguna metodologia MVC con POO.

Lo mejor es usar algun tipo de framework.

 

 

Sobre tu problema, no estas limpiando el buffer de salida de mysql.

Ademas, debes ocupar la libreria mysqli.

 

Te envio una clase que te va a servir

 

Bajala aqui -> http://www.megaupload.com/?d=5LYUM67E

 

Esta clase no es lo mejor, pero te permite mantener compatibilidad con tu codigo antiguo.

 

$query = query::getConection();

$resultado = $query->procedure("sp_BuscarIdProd","'$codBar'",1);

 

Lo que hace es guardar en $resultado la salida del procedimiento almacenado "sp_BuscarIdProd"

El segundo parametro de la funcion es para pasar los parametros al procedimiento almacenado.

 

El tercer parametro puede ser "1" o "N". Se refiere al tipo de salida del procedimiento almacenado.

Si es 1 es solo "1 row", si es N quiere decir que el procedimiento de devuelve mas de una fila de resultados.

 

Con eso no tendras problemas con el "Commands out of sync", ya que la clase limpia el buffer de salida de mysql.

 

 

Cuando el sistema esta en explotacion, cambia el valor de la variable testing a cero, para que se te envien los errores SQL a tu correo.

 

Saludos!

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...