Diferencia entre revisiones de «PHP Operacións BD Mysql»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 70: Línea 70:
 
* Utilizando obxectos: [https://secure.php.net/manual/es/mysqli.construct.php mysql::_construct]
 
* Utilizando obxectos: [https://secure.php.net/manual/es/mysqli.construct.php mysql::_construct]
  
−
* Sintaxe:  
+
* Sintaxe (se indica a sintaxe do construtor e polo tanto será equivalente a facer un 'new' da clase mysqli):  
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
mysqli::__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )
 
mysqli::__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )
 
</syntaxhighlight>  
 
</syntaxhighlight>  
  
−
: Os parámetros a pasar son:  
+
: Todos eles son optativos, pero normalmente indicaremos o nome de host, login, password e base de datos.
 +
: Os parámetros son:  
 
:* Host a conectar (cadea): Pode ser o nome ou a dirección IP. Normalmente imos poñer 'localhost' (se o xestor de bases de datos está instalado no mesmo equipo que o servidor web).  
 
:* Host a conectar (cadea): Pode ser o nome ou a dirección IP. Normalmente imos poñer 'localhost' (se o xestor de bases de datos está instalado no mesmo equipo que o servidor web).  
 
:* Nome do usuario con acceso á base de datos (cadea): Nome do usuario que ten acceso á base de datos.
 
:* Nome do usuario con acceso á base de datos (cadea): Nome do usuario que ten acceso á base de datos.
−
:* Password:  
+
:* Password (cadea): Password do usuario.
 +
:* Dbname  (cadea): Nome da base de datos sobre a que imos traballar.
 +
:* Porto (numérico): Porto no que está escoitando o xestor de base de datos. No caso de mysql ó o 3306.
 +
:* Socket (cadea): Socket ou tubería para conectar có xestor de bases de datos. En Linux é un tipo especial de arquivo que serve para 'transmitir' información, neste caso, cara o xestor de bases de datos.
  
  
 +
* Aplicado ao noso caso, teremos a seguinte orde:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
$conex = new mysqli('localhost','user_php','user_php','PHP');
 +
</syntaxhighlight>
 +
 +
 +
* En caso de erro, $conex é un obxecto que represente a conexión á base de datos.
 +
 +
:* En caso de ter unha versión PHP anterior á PHP 5.2.9 e 5.3.0 teremos que chamar á función [http://www.w3schools.com/php/func_mysqli_connect_error.asp mysqli_connect_error()] desta forma:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="2" >
 +
$conex = new mysqli('localhost','user_php','user_php','PHP');
 +
if (mysqli_connect_error()){
 +
  die('Erro de Conexión (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
 +
}
 +
</syntaxhighlight>
 +
 +
:* En caso de ter unha versión PHP posterior á PHP 5.2.9 e 5.3.0:
 +
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="2" >
 +
$conex = new mysqli('localhost','user_php','user_php','PHP');
 +
if ($conex->connect_error) {
 +
  die('Erro de Conexión (' . $conex->connect_errno . ') ' . $conex->connect_error);
 +
}
 +
</syntaxhighlight>
 +
 +
: Como vemos amosamos por un lado a mensaxe de erro que devolve o xestor de bases de datos e o número de erro asociado a esa mensaxe.
 +
 +
: Podemos consultar os número de erro e mensaxes asociadas [http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html neste enlace].
 +
 +
 +
* Por exemplo, imos modificar o password do usuario por un que non exista e veremos o resultado:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="2" >
 +
$conex = new mysqli('localhost','user_php','password_non_existe','PHP');
 +
if (mysqli_connect_error()){
 +
  die('Erro de Conexión (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
 +
}
 +
</syntaxhighlight>
 +
 +
: Dará como resultado:
 +
[[Imagen:Php_BD_3.jpg|400px|center]]
  
 
== Alta ==
 
== Alta ==

Revisión del 11:04 29 dic 2016

Introdución

  • Como comentamos no punto anterior, para conectarnos a un xestor de base de datos específico imos ter que ter instalados os drivers correspondentes.
Un driver é o software que nos permite comunicarnos cun xestor de base de datos, pero normalmente non imos facer dita comunicación utilizando o driver directamente se non que o usaremos a través dunha API, que son un conxunto de clases, funcións,... que nos permiten facer uso do driver e conectar a un xestor de base de datos.
  • Existen dous tipos de API´s:
  • Procedimentais: Facemos uso de funcións para realizar as operacións contra a base de datos.
  • Orientadas a obxectos: Instanciamos clases e chamamos a métodos dos obxectos creados.

Normalmente faremos uso desta segunda opción.


  • En PHP, ditas API´s se 'activan' facendo uso de Extensións.
Indicar que unha API non é o mesmo que unha extensión en PHP, xa que algunhas extensións non proporcionan ningunha API ao usuario (por exemplo a extensión do driver PDO MySQL, non proporciona ningunha API ó programador PHP).


  • Existen tres APIs principais para conectar a un servidor de bases de datos MySQL:
  • Extensión MySQL de PHP
  • Extensión mysqli de PHP
  • Obxectos de Datos de PHP (PDO)


  • Para conectarnos imos utilizar as funcións mysqli (mysql improved) que foron introducidas a partires de Mysql 4.1
A extensión mysqli ven incluída nas versiones PHP 5 e posteriores.
Algunha das melloras de dita extensión con respecto á extensión mysql:


Dita extensión tamén ten unha versión procedural, de tal forma que imos poder chamar ás funcións de dúas maneiras diferentes:

Exemplo de función cun estilo procedimental que pecha unha conexión a unha base de datos ($link é un identificador cando se fai a conexión contra a base de datos):

1 mysqli_close($link);

Exemplo de función cun estilo obxectual que pecha unha conexión a unha base de datos:

1 mysqli::close();


  • Aquí tedes un cadro comparativo obtido de php.net onde se ve o comentado anteriormente:
Php BD 2.jpg


Nota: Máis información neste enlace.

Conexión

  • Partimos da base de que xa temos instalado:
  • O xestor de bases de datos Mysql
  • Unha base de datos creada. Neste manual vai ter de nome PHP.
  • Un usuario / password que teña todos os permisos sobre a base de datos creada. Neste manual o usuario/password creado son user_php/user_php.


Todo o anterior xa está indicado no [wiki.cifprodolfoucha.es/index.php?title=PHP_Requirimentos_previos_para_acceso_a_datos punto anterior da wiki].

Consulta

  • Sintaxe (se indica a sintaxe do construtor e polo tanto será equivalente a facer un 'new' da clase mysqli):
1 mysqli::__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )
Todos eles son optativos, pero normalmente indicaremos o nome de host, login, password e base de datos.
Os parámetros son:
  • Host a conectar (cadea): Pode ser o nome ou a dirección IP. Normalmente imos poñer 'localhost' (se o xestor de bases de datos está instalado no mesmo equipo que o servidor web).
  • Nome do usuario con acceso á base de datos (cadea): Nome do usuario que ten acceso á base de datos.
  • Password (cadea): Password do usuario.
  • Dbname (cadea): Nome da base de datos sobre a que imos traballar.
  • Porto (numérico): Porto no que está escoitando o xestor de base de datos. No caso de mysql ó o 3306.
  • Socket (cadea): Socket ou tubería para conectar có xestor de bases de datos. En Linux é un tipo especial de arquivo que serve para 'transmitir' información, neste caso, cara o xestor de bases de datos.


  • Aplicado ao noso caso, teremos a seguinte orde:
1 $conex = new mysqli('localhost','user_php','user_php','PHP');


  • En caso de erro, $conex é un obxecto que represente a conexión á base de datos.
  • En caso de ter unha versión PHP anterior á PHP 5.2.9 e 5.3.0 teremos que chamar á función mysqli_connect_error() desta forma:
1 $conex = new mysqli('localhost','user_php','user_php','PHP'); 
2 if (mysqli_connect_error()){
3    die('Erro de Conexión (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
4 }
  • En caso de ter unha versión PHP posterior á PHP 5.2.9 e 5.3.0:
1 $conex = new mysqli('localhost','user_php','user_php','PHP'); 
2 if ($conex->connect_error) {
3    die('Erro de Conexión (' . $conex->connect_errno . ') ' . $conex->connect_error);
4 }
Como vemos amosamos por un lado a mensaxe de erro que devolve o xestor de bases de datos e o número de erro asociado a esa mensaxe.
Podemos consultar os número de erro e mensaxes asociadas neste enlace.


  • Por exemplo, imos modificar o password do usuario por un que non exista e veremos o resultado:
1 $conex = new mysqli('localhost','user_php','password_non_existe','PHP'); 
2 if (mysqli_connect_error()){
3    die('Erro de Conexión (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
4 }
Dará como resultado:
Php BD 3.jpg

Alta

Baixa

Modificación

Procedementos almacenados

Permisos mínimos


-- Ángel D. Fernández González -- (2016).