> Faqs > Depurar un error al insertar datos en Mysql con PHP

Depurar un error al insertar datos en Mysql con PHP

Hola, cuando paso los datos mediante un formulario recogiendolos con el método _POST me hace bien el insert pero no me almacena los datos en la tabla. si hago un echo me devuelve INSERT INTO acomoda(id_cliente, aaod, aaoi, arnap, fecha, flexiod, flexioi, memod, memoi) VALUES ('1', 1.03', '0.03', '2.01', '2020-08-13', '0.09', '2.07', '0.03', '1.01') esta correcto pero si hago un var_dump() me devuelve false

De una tabla cojo el id persona que añado a la tabla acomoda donde almaceno los valores.

CREATE TABLE `acomoda` (
 `id_acomoda` int(11) NOT NULL AUTO_INCREMENT,
 `aaod` decimal(11,2) NOT NULL,
 `aaoi` decimal(11,2) NOT NULL,
 `flexiod` decimal(11,2) NOT NULL,
 `flexioi` decimal(11,2) NOT NULL,
 `memod` decimal(11,2) NOT NULL,
 `memoi` decimal(11,2) NOT NULL,
 `fecha` date NOT NULL,
 `arnap` decimal(11,2) NOT NULL,
 `id_cliente` int(11) NOT NULL,
 PRIMARY KEY (`id_acomoda`),
 UNIQUE KEY `id_cliente` (`id_cliente`),
 CONSTRAINT `acomoda_personas` FOREIGN KEY (`id_cliente`) REFERENCES `personas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
y esta es la tabla personas:

`CREATE TABLE `personas` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nombre` varchar(80) NOT NULL,
 `email` varchar(50) NOT NULL,
 `telefono` varchar(20) DEFAULT NULL,
 `estado_civil` varchar(30) NOT NULL,
 `hijos` int(11) NOT NULL,
 `intereses` varchar(50) DEFAULT NULL,
 `apellido1` varchar(80) NOT NULL,
 `apellido2` varchar(80) NOT NULL,
 `dni` varchar(9) NOT NULL,
 `fecha` date NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1

Aqui creo el formulario y paso los valores:

<!DOCTYPE html> 
<?php 
	include("conexion.php");
	$id = $_GET['id'];
	
	$sql = "SELECT * FROM personas WHERE id = '$id'";
	$resultid = $mysqli->query($sql);
	$row = $resultid->fetch_array(MYSQLI_ASSOC);

	
?>

<meta charset="UTF-8">
<html lang="es">
	<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Insertar valores Acomoda</title>
	
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<link href="../css/bootstrap.min.css" rel="stylesheet">
		<link href="../css/bootstrap-theme.css" rel="stylesheet">
		<script src="../js/jquery-3.1.1.min.js"></script>
		<script src="../js/bootstrap.min.js"></script>
		<link href="bootstrap.min.css" rel="stylesheet">  	
	</head>

<body>
	<div class="col-md-8 col-md-offset-2">
		<h1>Inserta Valores en Acomoda</h1>

		<form method="POST" action="insertar_acomoda.php">
		  <div class="form-group" class="col-sm-2">
			<label>Revisión: </label> 
			<input type="date" class="form-control" id="fecha" name="fecha" placeholder="fecha" value="" required="required" ><br />
		  </div>
		  
		    
		  	<label>Id Cliente</label>
			<input type = "number" size="5" class="field left" readonly="yes" name= "id_cliente" class="form-control" placeholder="" value="<?php echo $row['id']; ?>"><br />
			

			<label>aaod:</label>
			<input type = "number" name= "aaod" step = ".01" class="form-control" required="required" ><br />
		  
  			<label>aaoi:</label>
  			<input type="number" name="aaoi" step = ".01" class="form-control" required="required"><br />
  		   
  		  
  			  <label>arnap:</label>
  			  <input type="number" name="arnap" step = ".01" class="form-control" required="required"><br />
  			  
  			
  			  <label>flexiod:</label>
  			  <input type="number" name="flexiod" step = ".01" class="form-control" required="required"><br />
  		   
  		    
  			  <label>flexioi:</label>
  			  <input type="number" name="flexioi" step = ".01" class="form-control" required="required"><br />
  		  
  		   
  			  <label>memod:</label>
  			  <input type="number" name="memod" step = ".01" class="form-control" required="required"><br />
  		  
  		
  			  <label>memoi:</label>
  			  <input type="number" name="memoi" step = ".01" class="form-control" required="required"><br />
  		    <br />
  		    <div class="form-group">				
				<input type="submit" name="insert" class="btn btn-warning" value="INSERTAR DATOS"><br />
			</div>
	    </form>	
	</div>
<br /><br /><br />
	
	

	
	

	</body>
</html>

Aqui esta insert_acomoda donde lo almaceno:

<!DOCTYPE html> 
<?php 
	require 'conexion.php';
	
	$id_cliente = $_POST['id_cliente'];

	$aaod = $_POST['aaod'];
	//echo $_POST['aaod'];
	$aaoi = $_POST['aaoi'];
	//echo $_POST['aaoi'];
	$arnap = $_POST['arnap'];
	//echo $_POST['arnap'];
	$fecha = $_POST['fecha'];
	//echo $_POST['fecha'];
	$flexiod = $_POST['flexiod'];
	//echo $_POST['flexiod'];
	$flexioi = $_POST['flexioi'];
	//echo $_POST['flexioi'];
	$memod = $_POST['memod'];
	//echo $_POST['memod'];
	$memoi = $_POST['memoi'];
	//echo $_POST['memoi'];

			
			$sql = "INSERT INTO acomoda(id_cliente, aaod, aaoi, arnap, fecha, flexiod, flexioi, memod, memoi) VALUES ('$id_cliente', $aaod', '$aaoi', '$arnap', '$fecha', '$flexiod', '$flexioi', '$memod', '$memoi')";

			echo $sql;
			$mysqli->query($sql);
			//$resultado = $mysqli->query($sql);
			//var_dump($resultado);
	?>

	<html lang="es">
	<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Insertar valores Acomoda</title>
	
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<link href="../css/bootstrap.min.css" rel="stylesheet">
		<link href="../css/bootstrap-theme.css" rel="stylesheet">
		<script src="../js/jquery-3.1.1.min.js"></script>
		<script src="../js/bootstrap.min.js"></script>
		<link href="bootstrap.min.css" rel="stylesheet">  	
	</head>

<body>

	<div class="container">
			<div class="row">
				<div class="row" style="text-align:center">
					<?php if($mysqli->query($sql)) { ?>
						<h3>REGISTRO GUARDADO</h3>
						<?php } else { ?>
						<h3>ERROR AL GUARDAR</h3>
					<?php } ?>
					
					<a href="acomoda.php" class="btn btn-primary">Regresar</a>
					
				</div>
			</div>
		</div>
	</body>
</html>


Respuestas

El método query te devuelve un true o false dependiendo de si se pudo o no ejecutar la sentencia.

$resultado = $mysqli->query($sql);

Es decir, $resultado será un boleano. Por eso te dice false, porque no ha podido insertar nada. Por tanto, tienes un error en tu sentencia SQL.

Lo más normal para depurar el error es usar el método "error" de mysqli, que te muestra el último error que se ha producido.

$resultado = $mysqli->query("INSERT INTO acomoda (id_cliente, otra_cosa) VALUES ('1', 'algo')");
if (! $resultado) {
    echo "Error en la inserción: " . $mysqli->error;
}

Otra alternativa es que copies y pegues la sentencia SQL en un programa de interfaz gráfica de MySQL (por ejemplo phpmyadmin) para que lo intentes ejecutar y el propio programa te advierta el error que tiene tu sentencia.

Miguel Angel
3295 146 215 17