Conectar PHP a base de datos MySQL en otro servidor usando PDO y MySQLi

Si normalmente el código fuente y la base de datos están en el mismo servidor de alojamiento, solo necesitas configurar el nombre del servidor como localhost. Sin embargo, en muchos casos en los que necesitamos usar una base de datos adicional o tenemos un rango de IP de servidor externo, se requiere una configuración adicional en este servidor adicional.

Cuando te conectas a través de una dirección IP en otro servidor, es posible que obtengas el siguiente error: Host ‘xxx.xxx.xxx.xxx’ no tiene permitido conectarse a este servidor MySQL.

Necesitamos crear un usuario para otorgarle al lado de la conexión; puedes conceder privilegios de MySQL a todas las bases de datos o a bases de datos y tablas específicas.

La forma de hacer la conexión es la siguiente:

I. Crea un usuario y otórgale permisos antes de usarlo para conectarte.

Crea un nombre de usuario y contraseña para el Usuario:

Supongamos que el nombre de usuario y la contraseña recién creados son los siguientes:

// To GRANT ALL privileges to a user, allowing that user full control over all database, use the following syntax:

CREATE USER ‘username’@’%’ IDENTIFIED BY ‘password’;
GRANT ALL PRIVILEGES ON . TO ‘username’@’%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

OR

CREATE USER ‘username’@’localhost’ IDENTIFIED BY ‘password’;
GRANT ALL PRIVILEGES ON . TO ‘username’@’localhost’ WITH GRANT OPTION;

// To GRANT ALL privileges to a user, allowing that user full control over a specific database:

GRANT ALL PRIVILEGES ON YOUR_DATABASE.* TO ‘username’@’%’;

// Or control over a specific table

GRANT ALL PRIVILEGES ON DATABASE_NAME.TABLE_NAME TO ‘username’@’%’;

Obtener listas Usuario

Puedes consultar la lista de usuarios con el comando:

SELECT user FROM mysql.user;

Dejar declaración de usuario

DROP USER user [, user] …

Example:

DROP USER ‘username’@’localhost’;
DROP USER ‘username’@’%’;

La parte del nombre de host del nombre de la cuenta, si se omite, por defecto es «%».

La declaración DROP USER elimina una o más cuentas MySQL y sus privilegios. Elimina filas de privilegios para la cuenta de todas las tablas de concesión. Se produce un error para cuentas que no existen (https://dev.mysql.com).

II. Utilice PDO y MySQLi para conectarse a la base de datos MySQL

En el servidor conectado, la información es la siguiente:

$serverIP = “xxx.xxx.xxx.xxx”; // server ip or server name
$username = “username”;
$password = “password”;
$databaseName = “your_database_name”;
$port = 3306; // default_port or your_server_port

2.1. Conecte PHP a MySQL a través de MySQLi

// create connection
$conn = new mysqli($serverIP, $username, $password, $databaseName, $port);

// check connection
if ($conn->connect_error) {
die(“Connection failed: ” . $conn->connect_error);
}
echo “Connected successfully”;

2.2. Conecte PHP a MySQL a través de PDO

$conn = new PDO(‘mysql:host=’ . $serverIP . ‘; port=’ . $port . ‘; dbname=’ . $databaseName, $username, $password);
try {
$conn->exec(“SET NAMES ‘utf8′”);
} catch (PDOException $ex) {
die($ex->getMessage());
}
return $conn;

2.3. Consultar la base de datos en otro servidor

Si después de conectarse ejecuta una consulta y obtiene un error como: mysql mezcla ilegal de intercalaciones para la operación ‘=’

Cómo comprobarlo: muestra variables como «collation_database»;

Cómo manejar el error: necesita convertir la base de datos y la tabla conectada al mismo formato que la otra base de datos, llamé CurrentDatabase y NewDatabase, NewTable está en NewDatabase

ALTER DATABASE NewDatabase DEFAULT COLLATE utf8_unicode_ci;
ALTER TABLE NewDatabase CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Gracias por leer el articulo.

Deja un comentario