Created: 2024-12-19 jue 09:33
mysqli
: API orientada a objetos o procedimentalmysqli
puede usarse de dos formas
No se recomiena mezlarlas
// ORIENTADO A OBJETOS
$conexion = new mysqli("ejemplo.com", "usuario", "contraseña", "basedatos");
$conexion->query("DROP TABLE IF EXISTS test");
// PROCEDIMENTAL
$conexion = mysqli_connect("ejemplo.com", "usuario", "contraseña", "basedatos");
mysqli_query($conexion,"DROP TABLE IF EXISTS test");
mysqli_connect
mysqli_init -> mysqli_options -> mysqli_real_connect
mysqli_close
mysqli
, con p:
delante del nombre de hostquery
$conn->query('
create table clientes(
id int auto_increment primary key,
nombre varchar(255),
apellidos varchar(255)
);
');
$resultado = $mysqli->query("SELECT id FROM test ORDER BY id ASC");
$resultado->data_seek(0);
while ($fila = $resultado->fetch_assoc()) {
echo " id = " . $fila['id'] . "\n";
}
$resultado = $mysqli->query("SELECT id FROM test ORDER BY id ASC");
$filas = $mysqli->fetch_all(MYSQLI_ASSOC);
foreach ($filas as $fila) {
echo " id = " . $fila['id'] . "\n";
}
$mysqli->real_query("SELECT id FROM test ORDER BY id ASC");
$resultado = $mysqli->use_result();
while ($fila = $resultado->fetch_assoc()) {
echo " id = " . $fila['id'] . "\n";
}
$result = $sql->query("select ...");
if($result) {
// HA FUNCIONADO
}
else {
echo "Código de error mysql: $sql->errno";
echo "Mensaje de error mysql: $sql->error";
}
try{
$sql->query( "create ...");
// HA FUNCIONADO
}
catch(Exception $error){
echo "Error SQL con try-catch:" . htmlspecialchars( $error->getMessage() ) . "<br>\n";
echo "Error numérico SQL:" . $conexion->errno . "<br>\n";
foreach( $conexion->error_list as $error_description ){
var_dump($error_description );
}
}
$id = $_GET["id"];
$mysqli->query("delete from USUARIOS where id='$id'");
¿Qué ocurre si id
es
' or '1'='1' --
?
prepare
, bind
https://www.w3schools.com/php/php_mysql_prepared_statements.asp
mysqli_real_escape_string
puede tener problemas // prepare sql and bind parameters
$stmt = $conn->prepare("
INSERT INTO MyGuests (firstname, lastname, email)
VALUES (?, ?, ?)"
);
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
stmt->bind_param("sss", $firstname, $lastname, $email);
$stmt->execute();
$stmt = $conexion->prepare("select firstname, lastname, email
from MyGuests
where email like ?");
$stmt->bind_param("s",$filtro_email);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// Igual que con conexion->query()
...
}
i |
integer |
d |
double, float |
s |
string |
b |
BLOB |
date
: Formatea a texto un tiempo UNIXtime
: Consigue el tiempo UNIX actualstrtotime
: Pasa de texto a tiempo UNIX$fecha = date('Y-m-d H:i:s');
echo $fecha . "\n";
$unix_time = time();
echo $unix_time . "\n";
$str = strtotime('2024-12-06 19:14:40');
echo $str . "\n";
fecha_de_alta
al cliente. Inclúyelo en los listados y las inserciones.$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedatos");
$mysqli->autocommit(false);
$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();
$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
No hay que desesperar