Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Update Mysqli y bind_param error ?

Estas en el tema de Update Mysqli y bind_param error ? en el foro de PHP en Foros del Web. Muy buenas foreros! Os vuelvo a solicitar ayuda, esta vez me surge un problema con bind_param al hacer un update en la base de datos. ...
  #1 (permalink)  
Antiguo 12/04/2014, 13:02
Avatar de mati22  
Fecha de Ingreso: abril-2014
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Pregunta Update Mysqli y bind_param error ?

Muy buenas foreros!

Os vuelvo a solicitar ayuda, esta vez me surge un problema con bind_param al hacer un update en la base de datos.
(Aclaro que ya intente absolutamente todo lo que se me ocurrió y vi por internet, llevo dos días sin poder solucionar el error y quizá sea una simple novatada.)

Lo que necesito hacer:

Tengo una base de datos la cual contiene, entre otras columnas, la columna "Estado" con el valor "abierto" y la columna "ID" con el identificador de la operación.

Y básicamente, la función que necesito lograr es la siguiente:
Si el usuario hace click en cerrar en la operación con su ID correspondiente, se cambia el valor de "Estado = Abierto" en la db por "Estado = Cerrado".

En teoría, nada complejo de realizar (?)

Bien, el código preparado es el siguiente (debo aclarar que tome como base un código ya preparado de killersites y lo modifique a mis necesidades).

----------------------------------------------------------------------------------
Formulario donde se encuentra la tabla con las operaciones realizadas y el boton "edit".
----------------------------------------------------------------------------------

Código PHP:
 <?php
             $user_id 
$_SESSION['user_id'];          
                                 
$con=mysqli_connect(DB_HOSTDB_USERDB_PASSDB_NAME);
 if (
mysqli_connect_errno($con))
{
echo 
"Failed to connect to MySQL: " mysqli_connect_error();
}
if (
$result mysqli_query($con,"SELECT * FROM `operaciones` WHERE user_id = '$user_id'")){
                             
                                
// display records if there are records to display
                                
if ($result->num_rows 0)
                                {
                                        
// display records in a table
                                        
echo "<table border='1' cellpadding='10'>";
                                        
                                        
// set table headers
                                        
echo "<tr><th>ID</th><th>Simbolo</th><th>Tipo</th><th>Cotizacion de apertura</th><th>Fecha</th><th>Estado</th><th>Opciones</th></tr>";
                                        
                                        while (
$row $result->fetch_object())
                                        {
                                                
// set up a row for each record
                                                
echo "<tr>";
                                                echo 
"<td>" $row->ID "</td>";
                                                echo 
"<td>" $row->Simbolo "</td>";
                                                echo 
"<td>" $row->Tipo "</td>";
                                                echo 
"<td>" $row->Cotizacion "</td>";
                                                 echo 
"<td>" $row->Fecha "</td>";
                                                 echo 
"<td>" $row->Estado ."</td>";
                                                 echo 
"<td><a href='classes/records.php?id=" $row->ID "'>Edit</a></td>";
                                                echo 
"</tr>";
                                        }
                                        
                                        echo 
"</table>";
                                }
                                
// if there are no records in the database, display an alert message
                                
else
                                {
                                        echo 
"No results to display!";
                                }
                        }
                        
// show an error if there is an issue with the database query
                        
else
                        {
                                echo 
"Error: " $con->error;
                        }
                                        
                
?>
----------------------------------------------------------------------------------
Código para cerrar las operaciones cuando el usuario hace click en "edit"
----------------------------------------------------------------------------------

Código PHP:
<?php

    
// conectando a db
    
include('db.php');
    
    
// confirmando la variable ID
    
if (isset($_GET['id']) && is_numeric($_GET['id']))
    {
        
// obteniendo la variable ID desde la url
        
$id $_GET['id'];
    
        
// Conexion a db

        
$con=mysqli_connect(DB_HOSTDB_USERDB_PASSDB_NAME);
        
        
// Actualizando el registro de la db
        
        
if ($stmt $con->prepare("UPDATE * FROM `operaciones` SET `Estado` = 'cerrado' WHERE `ID` = ? "))
        {
            
$stmt->bind_param("i"$id);    
            
$stmt->execute();
            
$stmt->close();
        }
        else
        {
            echo 
"ERROR: could not prepare SQL statement.";
        }
        
$mysqli->close();
        
        
// redireccionar si la operacion fue satisfactoria
        
header("Location: view.php");
    }
    else
    
// si la variable ID no esta, redireccionar
    
{
        
header("Location: view.php");
    }

?>

He intentado de todo, cambiando los parametros de la sentencia sql, los parametros de bind, etc. Y no logro conseguir que funcione.
Me arroja el error could not prepare SQL statement.

Ahora, mi pregunta es: hay alguna forma más practica de realizar esta operacion o en que falla el código?

Desde ya, os agradezco vuestro tiempo.
Un saludo!
  #2 (permalink)  
Antiguo 12/04/2014, 16:26
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 5 meses
Puntos: 43
Respuesta: Update Mysqli y bind_param error ?

Probá así:
Código PHP:
Ver original
  1. // Conexion a db
  2. $con = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  3.  
  4. // Vemos si hubo un error
  5. {
  6.     die('Mierda! Tengo este error: '.mysqli_connect_error());
  7. }
  8.  
  9. // Sigue todo igual...
  10.  
  11. // Actualizando el registro de la db
  12. if ($stmt = $con->prepare("UPDATE * FROM `operaciones` SET `Estado` = 'cerrado' WHERE `ID` = ? "))
  13. {
  14.     //...

Cita:
Ahora, mi pregunta es: hay alguna forma más practica de realizar esta operacion o en que falla el código?
Usando un ORM
  #3 (permalink)  
Antiguo 12/04/2014, 22:54
Avatar de mati22  
Fecha de Ingreso: abril-2014
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Update Mysqli y bind_param error ?

Mysqli no me arroja ningún error, por lo que debería asumir que el error se encuentra en bind_parame ya que me arroja el error correspondiente.
Ahora intentaré utilizando un ORM (bueno, primero voy a averiguar que es jajaja...)
Gracias de todas formas (:

Alguna otra sugerencia?.
  #4 (permalink)  
Antiguo 12/04/2014, 23:56
Avatar de mati22  
Fecha de Ingreso: abril-2014
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Update Mysqli y bind_param error ?

Muy bien, problema solucionado.
Solución:
Primero que nada, realice la modificación correspondiente en phpMyAdmin ya que arroja la sentencia SQL.

Empecé el código desde 0 e intenté simplificarlo al máximo, ya que en sí, la operación es muy simple. Y esta vez, para el UPDATE, tomé como referencia la sentencia SQL arrojada en base a la modificación anterior.


--------------------------------
Código final
-------------------------------

Código PHP:
Ver original
  1. <?php
  2.  
  3.     // conectando a db
  4.     include('db.php');
  5.    
  6.     // confirmando la variable ID
  7.     if (isset($_GET['id']) && is_numeric($_GET['id']))
  8.     {
  9.         // obteniendo la variable ID desde la url y especificando la variable estado.
  10.         $con= mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  11.         $id = $_GET['id'];
  12.         $estado = "cerrado";
  13. }
  14.  
  15. //Realizando la modificación
  16. ($con, "UPDATE `login`.`operaciones` SET `Estado` = 'cerrado' WHERE `operaciones`.`ID` = '$id'");
  17. printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($con));
  18.     if (mysqli_connect_errno()) {
  19.     printf("Falló la conexión: %s\n", mysqli_connect_error());
  20.     exit();}
  21.  
  22. //En SET `Estado` = 'cerrado', es lo mismo si cambiara 'cerrado' por '$estado' (SET `Estado` = '$estado' ya que declaré la variable al principio. Para mis necesidades, no es necesario ya que el estado solo puede ser "abierto" o "cerrado" y no se puede reabrir una vez cerrada la op.
  23.    
  24.     ?>

Etiquetas: bind, informacion, mysqli
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:53.