Exemplo empregando as clase mysqli e mysqli stmt

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda


  • tabla.sql
CREATE TABLE IF NOT EXISTS `pruebas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(15) NOT NULL,
  `apellidos` varchar(25) DEFAULT NULL,
  `edad` tinyint(4) NOT NULL,
  `fechanac` date NOT NULL,
  `password` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


  • conexion.php
<?php
	//////////////////////////
	// conexion.php
	//////////////////////////

	// Datos configuración de la conexión al Servidor MySQL.

	$nombrebase="basedatos";
	$usuario="usuario";
	$servidor="localhost";

	$password="password";
	//////////////////////////////////////

	// Hacemos la conexión al servidor de MySQL utilizando la clase mysqli
	// Utilizamos la @ antes de crear el objeto, ya que si da error,
	// queremos mostrarlo con un mensaje personalizado.

	$mysqli=@new mysqli($servidor,$usuario,$password,$nombrebase);

	if ($mysqli->connect_error)
	{
		die ("Error en conexión base datos: ".$mysqli->connect_error);
	}
?>


  • altas.php
<?php
// Crear el formulario para recoger datos de los usuarios.

// Si estamos recibiendo datos del formulario...
// Insertamos esos datos en la tabla.

if ( isset($_POST['nombre']) && $_POST['nombre']!=""   )
{
	// Nos conectamos a la base de datos.
	require("conexion.php");
	
	// Preparamos la instrucción SQL. Prepare nos devuelve un objeto de la clase mysqli_stmt
// o false si hay un error.
	$stmt = $mysqli->prepare("insert into pruebas (nombre,apellidos,edad,fechanac,password) 
values(?,?,?,?,?)") or die($mysqli->error);
	
	// Enlazamos los parámetros (5 cadenas de texto 's')
	$stmt->bind_param("sssss",$_POST['nombre'],$_POST['apellidos'],$_POST['edad'],$_POST['fechanac'],
$_POST['password']);

	// Ejecutamos la sentencia preparada.
	$stmt->execute() or die($mysqli->error);
	
	// Mostramos el mensaje x filas insertadas correctamente.
	printf("%d fila insertada correctamente.\n",$stmt->affected_rows);
	
	// Cerramos la sentencia preparada.
	$stmt -> close();
			
	// Cerramos la conexión.
	$mysqli->close();
}
else
{
// En otro caso mostramos el formulario de altas.
?>
	<h2> Alta de Usuarios </h2>

	<form name="formulario" method="post">
	Nombre: <input name="nombre" type="text"/><br/>
	Apellidos: <input name="apellidos" type="text"/><br/>
	Edad: <input name="edad" type="text" size="2" maxlength="2" /><br/>
	Fecha Nacimiento: <input name="fechanac" type="text"/><br/>
	Password: <input name="password" type="password"/><br/>
	<input type="reset" value="Limpiar"/>
	<input type="submit" value="Alta Usuario"/><br/>
	</form>

<?php
}
?>



  • bajas.php
<?php
// Conectamos a la base de datos
require("conexion.php");

if (isset($_POST['id']) && $_POST['id']!="-1")
{
	// Construimos la sentencia de borrado SQL.
	$stmt = $mysqli->prepare("delete from pruebas where id=?") or die($mysqli->error);
	
	// Enlazamos los parámetros (1 entero 'i')
	// http://es2.php.net/manual/es/mysqli-stmt.bind-param.php
		
	$stmt->bind_param("i",$_POST['id']);

	// Ejecutamos la sentencia preparada.
	$stmt->execute() or die($mysqli->error);
	
	// Mostramos mensaje 
	echo "Registro borrado correctamente";
	
	// Cerramos la sentencia preparada.
	$stmt->close();
}
?>

<h2> Borrado de registros </h2>
<form name="formulario" method="post">
<select name="id">
<option value="-1">Seleccione registro</option>
<?php
	// Cubrimos dinámicamente el formulario.
	
	// Construimos la sentencia de select SQL
	 $stmt = $mysqli->prepare("select id,nombre,apellidos from pruebas") or die($mysqli->error);
	 
	// No tenemos ningún parámetro a enlazar, así que..
	// ejecutamos la sentencia preparada directamente
	$stmt->execute() or die($mysqli->error);

	// Si es una consulta de select almacenamos el resultado con el método store_result() del objeto $stmt.
	$stmt->store_result();
	
	// Número de filas obtenidas, si fuera necesario.
	// $numfilas=$stmt->num_rows;

	// Vinculamos unas variables a los resultados con el método bind_result() de stmt,
	// antes de llamar al método fetch() de stmt
	$stmt->bind_result($campoid, $camponombre, $campoapellidos);

	// Recorremos el recordset:
	while ($stmt->fetch())
	{
		$cadena=sprintf("<option value='%s'>%s %s</option>",$campoid,$camponombre,$campoapellidos);
		echo $cadena;
	}
		
	// Liberamos el resultado.
	$stmt-> free_result();
	
	// Cerramos la sentencia preparada.
	$stmt->close();
	
	// Cerramos conexión
	$mysqli->close();
?>
</select>
<input type="submit" value="Borrar Registro"/>
</form>



  • modificaciones.php
<?php
// Conectamos a la base de datos.
require("conexion.php");

// Si recibimos datos formulario de selección.
if (isset($_POST['selectid']) && $_POST['selectid']!=-1)
{
	// Preparamos la consulta SQL
	$stmt= $mysqli->prepare("select id,nombre,apellidos,edad from pruebas where id=?") 
or die($mysqli->error());
	
	// Enlazamos los parámetros (1 entero 'i')
	// http://es2.php.net/manual/es/mysqli-stmt.bind-param.php
	// Vinculamos los parámetros a la consulta
	$stmt->bind_param("i",$_POST['selectid']);
	
	// Ejecutamos la consulta preparada.
	$stmt->execute();

	// Si es una consulta de select almacenamos el resultado.
	$stmt->store_result();

	// Vinculamos unas variables a los resultados con el método bind_result() de stmt,
	// antes de llamar al método fetch() de stmt
	$stmt->bind_result($elid, $elnombre, $losapellidos, $laedad);
	
	// Leemos la primera fila de ese recordset
	// Los datos que hemos leído estará en las variables que hemos vinculado antes.
	$stmt->fetch();
	
	// Construimos el formulario y ponemos los datos
	// de ese usuario en los campos.
?>
	<!-- Formulario de altas -->
	<h2>Edición de Usuario</h2>

	<form name="formulario" method="post">
	Nombre: <input name="nombre" type="text" value="<?php echo $elnombre ?>"/><br/>
	Apellidos: <input name="apellidos" type="text" value="<?php echo $losapellidos ?>"/><br/>
	Edad: <input name="edad" type="text" size="2" maxlength="2" value="<?php echo $laedad ?>"/><br/>
	<input type="hidden" name="id" value="<?php echo $elid ?>"/>
   
	<input type="reset" value="resetear"/>
	<input type="submit" value="Actualizar"/><br/>
	</form>

<?php
}
// Si recibimos datos del formulario de edición...
if (isset($_POST['id']))
{
	// Preparamos la consulta SQL
	$stmt= $mysqli->prepare("update pruebas set nombre=?,apellidos=?,edad=? where id=?");
	
	// Enlazamos los parámetros (3 string:'s' y 1 entero:'i')
	// http://es2.php.net/manual/es/mysqli-stmt.bind-param.php
	$stmt->bind_param("sssi",$_POST['nombre'],$_POST['apellidos'],$_POST['edad'],$_POST['id']);
	
	// Ejecutamos consulta de update.
	$stmt->execute() or die($mysqli->error());
	
	// Cerramos la sentencia preparada.
	$stmt -> close();
			
	// Mostramos mensaje de OK.
	echo "Actualización correcta de los datos del usuario: {$_POST['nombre']} ";
}
?>
<h2> Actualización de Registros</h2>
<form name="formulario" method="post">
<select name="selectid">
<option value="-1">Seleccione registro</option>
<?php
	// Cubrimos dinámicamente el formulario.
	
	// Construimos la sentencia de select SQL
	 $stmt = $mysqli->prepare("select id,nombre,apellidos from pruebas") or die($mysqli->error);
	 
	// No tenemos ningún parámetro a enlazar, así que..
	// ejecutamos la sentencia preparada directamente
	$stmt->execute() or die($mysqli->error);

	// Si es una consulta de select almacenamos el resultado con el método store_result() del objeto $stmt.
	$stmt->store_result();
	
	// Número de filas obtenidas, si fuera necesario.
	// $numfilas=$stmt->num_rows;

	// Vinculamos unas variables a los resultados con el método bind_result() de stmt,
	// antes de llamar al método fetch() de stmt
	$stmt->bind_result($campoid, $camponombre, $campoapellidos);

	// Recorremos el recordset:
	while ($stmt->fetch())
	{
		$cadena=sprintf("<option value='%s'>%s %s</option>",$campoid,$camponombre,$campoapellidos);
		echo $cadena;
	}
		
	// Liberamos el resultado.
	$stmt-> free_result();

	// Cerramos la conexión.
	$mysqli->close();
?>
</select>
<input type="submit" value="Seleccionar"/>
</form>



  • consultas.php
<?php
	// Conectarse a la base de datos.
	require("conexion.php");

	// Preparamos la consulta.
	$stmt = $mysqli->prepare("SELECT nombre,apellidos,edad from pruebas") or die($mysqli->error);

	// Ejecutamos la consulta preparada.
	$stmt->execute();

	// Si es una consulta de select almacenamos el resultado.
	$stmt->store_result();

	// Número de filas obtenidas en $stmt->num_rows
	echo "Se han encontrado $stmt->num_rows registros.<br/><br/>";

	// Vinculamos unas variables a los resultados con el método bind_result() de stmt,
	// antes de llamar al método fetch() de stmt
	$stmt->bind_result($elnombre, $losapellidos, $laedad);

	// Recorremos el recordset.
	echo "<table border='1'>";
	echo "<tr><th>Nombre</th><th>Apellidos</th> <th>Edad</th></tr>";

	while ($stmt->fetch())
	{
		echo "<tr><td>".$elnombre."</td><td>".$losapellidos."</td><td>".$laedad."</td></tr>";
	}

	echo "</table>";
	
	// Liberamos el espacio que ocupa ese resultado en memoria.
	$stmt -> free_result();
	
	// Cerramos la conexión con el servidor mysql.
	$mysqli->close();
?>

--Veiga 17:39 8 ene 2013 (CET)