Esta sección proporciona una introducción de las opciones disponibles a la hora de desarrollar una aplicación PHP que necesite interactuar con una base de datos MySQL.
Aquí solo trataremos las APIs orientadas a objetos que es la recomendada, puesto que está más actualizada y conlleva una mejor organización de código. Con este tipo de API se instancian clases, y entonces se invocan a métodos de los objetos creados.
Si una aplicación en PHP necesita comunicarse con un servidor de BD, necesitará escribir el código PHP que realice tareas tales como conectar al servidor de BD, realizar consultas y otras funciones relacionadas con BD. Es necesario tener un software instalado en el sistema que proporcione a la aplicación en PHP la API, que manejará la comunicación entre el servidor de BD y la aplicación, posiblemente empleando en caso necesario otras bibliotecas. A este software generalmente se le conoce como conector, dado que permite a una aplicación conectar con un servidor de BD.
La extensión mysqli, o MySQL mejorada, se desarrolló para aprovechar las nuevas funcionalidades encontradas en los sistemas MySQL con versión 4.1.3 o posterior. La extensión mysqli viene incluida en las versiones PHP 5 y posteriores.
$mysqli = new mysqli('---servidor---','---usuario---','---clave---','---BD---') OR die('Fallo al conectar a MySQL o BD');
En el parámetro ---servidor--- normalmente se usa localhost
Lo mas común es que la cadena de conexión este en un archivo aparte y uses include();, para no tener que poner cada vez la cadena de conexión. Tener en cuenta de que si se incluye header ('Content-type: text/html; charset=utf-8'); la instruccion include tiene que ser la primera del archivo PHP.
echo $mysqli->character_set_name(); echo $mysqli->get_charset(); echo $mysqli->stat();
Establece el conjunto de carácteres predeterminado del cliente.
$mysqli->set_charset('utf8'); date_default_timezone_set('America/Lima');
Escapa caracteres especiales de una cadena en una sentencia SQL, teniendo en cuenta el conjunto de caracteres actual de la conexión. Se usa para crear una cadena SQL legal que pueda ser usada sin peligro en una sentencia SQL.
$var1 = $mysqli->real_escape_string(); $var2 = $mysqli->escape_string();
$mysqli->close();
$sql = 'SELECT * FROM tabla WHERE campo=dato'; $res = $mysqli->query($sql) OR die('Revisa el query de tabla<p>'. $sql);
if ($mysqli->affected_rows == 1){ $G='Ya grabo...'; }else{ $G='Problemas, no grabo'; }
Devuelve el id autogenerado en insert.
echo $mysqli->insert_id;
Una vez ejecutada la consulta se puedo obtener el conjunto de datos hasta que se liberen expresamente con FREE() o CLOSE().
Retorna un array asociativo correspondiente a la fila obtenida o NULL si no hubiera más filas.
$res = $mysqli->query("SELECT count(*) AS n FROM tabla"); if ($row = $res->fetch_assoc()){ $tot = $row['n']; }else{ $tot = 0; }
while ($row = $res->fetch_assoc()) { echo $row['nom']; }
Los nombres de los campos devueltos por esta función son sensibles a mayúsculas y minúsculas. Esta función define campos NULOS al valor NULL de PHP.
$sql ='SELECT nom,ape FROM tabla'; $res = $mysqli->query($sql) OR die('Revisa el query de tabla<p>'. $sql); while ($obj = $res->fetch_object()) { echo $obj->nom; echo $obj->ape; }
echo $res->num_rows;
$sql = 'SELECT * FROM tabla'; if ($res = $mysqli->query($sql)){ $col = $res->fetch_fields(); foreach ($col as $val){ echo 'Nombre:'. $val->name; echo 'Tabla:'. $val->table; echo 'Tipo:'. $val->type; } }
Propiedad | Descripción |
---|---|
name | El nombre de la columna |
orgname | El nombre original de la columna si se especificó un alias |
table | El nombre de la tabla al que pertenece el campo (si no es calculado) |
orgtable | El nombre original de la tabla si se especificó un alias |
max_length | El ancho máximo del campo del conjunto de resultados. |
length | El ancho del campo, en bytes, como se especificó en la definición de la tabla. Observe que este número (bytes) podría diferir del valor de la definición de la tabla (caracteres), dependiendo del conjunto de caracteres que se emplee. Por ejemplo, el conjunto de caracteres utf8 tiene 3 bytes por carácter, por lo que varchar(10) devolverá una longitud de 30 para utf8 (10*3), aunque devuelve 10 para latin1 (10*1). |
charsetnr | El número del conjunto de caracteres (id) del campo. |
flag | Un entero que representa las banderas de bits del campo. |
type | El tipo de datos usado por el campo |
decimals | El número de decimales usado (para campos integer) |
Si recuperaste los nombres de los campos automáticamente, probablemente quieras obtener las filas automáticamente también.
while ($row = $res->fetch_assoc()) { echo ''; foreach ($col as $val) { echo ' \n"; }'. $row[$val->name] .' '; } echo "
echo $res->num_cols;
Puedes averiguar el numero de columnas recuperadas.
echo $res->field_count;
Siempre se debe liberar la memoria asociada al resultado, cuando el objeto ya no es necesario.
$res->close(); $res->free(); $res->free_result();
UPDATE tabla SET campo=REPLACE(campo,'x','y');
x | y |
---|---|
á | á |
é | é |
ó | ó |
ú | ú |
É | É |
Ó | Ó |
Ú | Ú |
ñ | ñ |
Ñ | Ñ |
¿ | ¿ |
¡ | ¡ |