Database esterno
Vorrei passare un mio sito web dinamico in Drupal.
Devo conservare tutti i contenuti, db, e layout.
La cosa che mi preoocupa è il DB o tabella esterna.
Una delle cose che fa il mio sito è:
Recuperare da 2 tabelle i dati degli utenti e poi ad un relativo pulsante rimandare al modulo contatti che invia email al determinato utente.
Qual'è la migliore procedura?
Grazie
Risposte
Ci sono varie tecniche e
Ci sono varie tecniche e alcuni moduli per lavorare on tabelle esterne all'installazione di drupal. Te ne indico alcuni he potresti utilizzare oppure vedere il codice per fare quello che ti serve:
https://www.drupal.org/project/data
https://www.drupal.org/project/views_database_connector
https://www.drupal.org/project/external
Per connettersi al database in drupal per visualizzare il contenuto in una tabella
$databases['default']['default'] = array(
'database' => 'drupal8',
'username' => 'username',
'password' => 'password',
'prefix' => '',
'host' => 'localhost',
'port' => '3306',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);
$databases['external']['default'] = array(
'database' => 'external',
'username' => 'username',
'password' => 'password',
'prefix' => '',
'host' => 'localhost',
'port' => '3306',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);
Per attivare il database esterno
\Drupal\Core\Database\Database::setActiveConnection('external');
Per attivare il database Drupal
\Drupal\Core\Database\Database::setActiveConnection();
Vedi anche
https://www.drupal.org/node/2710557
Si puo anche usare PDO per un eventuale modulo custom:
try {
$db = new PDO("mysql:host=hostname;dbname=database", "user", "password");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// always disable emulated prepared statement when using the MySQL driver
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$query = $db->prepare("SELECT * FROM ".$prefix."sometable WHERE x= :x");
$query->bindParam(':x', $x, PDO::PARAM_STR);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
//
}
}
catch (PDOException $e) {
if ($e->getCode() == '2A000') echo "Syntax Error: ".$e->getMessage();
echo dirname(__file__) . "DataBase Error: getMessage: " . $e->getMessage() . " getCode: " . $e->getCode();
}
Meglio mettere i dati di connessione nel settings.php, ad esempio per una connessione SQL SERVER:
define('MSSQL_DSN01','sqlsrv:Server='.$conf['db_server'].',1533;Database=dbname');
define('MSSQL_USER01','sas');
define('MSSQL_PWD01','sas');
quindi la connessione diventa
$db = new PDO(MSSQL_DSN01, MSSQL_USER01, MSSQL_PWD01);