buinense Posted July 8, 2010 Report Share Posted July 8, 2010 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 More sharing options...
Ra Posted July 8, 2010 Report Share Posted July 8, 2010 Mira esto es para la versión PHP 4.4.4... no sé si estará resuelto en las versiones más nuevas... Otros dicen que es mejor usar mysqli.... Salu2. Link to comment Share on other sites More sharing options...
buinense Posted July 8, 2010 Author Report Share Posted July 8, 2010 Cual es la diferencia entre MYSQL y MYSQLI?... Link to comment Share on other sites More sharing options...
Vendedor Posted July 8, 2010 Report Share Posted July 8, 2010 (edited) librerias... lee: http://us2.php.net/mysqli con mysqli te deberia pescar los calls y stored procedures. Edited July 8, 2010 by Vendedor Link to comment Share on other sites More sharing options...
Ra Posted July 8, 2010 Report Share Posted July 8, 2010 (edited) 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 July 8, 2010 by ragys Link to comment Share on other sites More sharing options...
axelstone Posted July 13, 2010 Report Share Posted July 13, 2010 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now