Puncte:-1

Cum pot seta programatic o conexiune la baza de date?

drapel cn

Bună, poate cineva să ajute cu o conexiune externă la o bază de date.

$postgis_database = matrice(
        'database' => $drugis_postgis_connection->getdatabase(),
        'username' => $drugis_postgis_connection->getusername(),
        'parolă' => $drugis_postgis_connection->getpassword(),
        'gazdă' => $drugis_postgis_connection->gethost(),
        'driver' => 'pgsql',

    );
    Database::setActiveConnection('postgis','default', $postgis_database);
    \Drupal::baza de date();
    $info = Baza de date::getConnection();
    dpm($info);

$info este conexiunea implicită, nu știu cum să mă conectez la conexiunea „postgis”.

Kevin avatar
drapel in
De ce aceasta nu face parte din matricea bazelor de date din settings.PHP? Care este eroarea?
Steffen  avatar
drapel cn
Nu există nicio eroare. getConnectionInfo(); arată-mi baza de date implicită. Aceasta face parte din modulul de conexiune la entitate de configurare pentru conexiuni multiple la baze de date. Nu pot trece la „postgis”
drapel ru
Nu există nicio [setActiveConnection](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AsetActiveConnection/9.0.x) cu mai mult de un parametru. Aruncă o privire la [Database::addConnectionInfo](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AaddConnectionInfo/9.0.x ). Chiar ar trebui să încercați să obțineți un IDE adecvat cu completarea codului în funcțiune (cum ar fi VS Code sau PHPStorm), nu trebuie să ghiciți orbește parametrii funcției, un IDE va ​​răspunde la întrebări ca acestea din mers.
Jaypan avatar
drapel de
Puteți declara mai multe conexiuni la baze de date în settings.php și puteți comuta între https://www.drupal.org/docs/drupal-apis/database-api/instantiating-a-database-connection-object#s-using-a -conexiune-bază-de-date-diferită
Puncte:0
drapel us

Baza de date::setActiveConnection() doar setează ca conexiune activă o conexiune definită în fișierul settings.php sau adăugată dintr-un apel anterior la Baza de date::addConnectionInfo().

Codul corect ar fi următorul.

$postgis_database = [
  'database' => $drugis_postgis_connection->getdatabase(),
  'username' => $drugis_postgis_connection->getusername(),
  'parolă' => $drugis_postgis_connection->getpassword(),
  'gazdă' => $drugis_postgis_connection->gethost(),
  'driver' => 'pgsql',
];

// $key $target
Database::addConnectionInfo('postgis','default', $postgis_database);
// $target $key
Database::setActiveConnection('default', 'postgis');

Observați ordinea parametrilor în ultimele două apeluri de metodă. Observați, de asemenea, ordinea indexului matricei folosită în $bază de date matrice setată în fișierul settings.php.

// $key $target
$databases['default']['default'] = [
  'database' => 'databasename',
  'username' => 'sqlusername',
  'parolă' => 'parolă sql',
  'host' => 'localhost',
  'port' => '3306',
  'driver' => 'mysql',
  'prefix' => ''',
  'colation' => 'utf8mb4_general_ci',
 ];

Conexiunile adăugate cu Baza de date::addConnectionInfo() nu sunt permanente; se adaugă la proprietatea statică a Bază de date clasă. Toate funcțiile/metodele care doresc să utilizeze conexiunea definită în $postgis_database trebuie să execute codul pe care l-am arătat înainte de a interoga baza de date sau de a salva valori în baza de date.
Probabil că este mai bine să adăugați conexiunile suplimentare în setări.

O eroare de evitat este apelarea funcțiilor Drupal care interogează un anumit tabel al bazei de date Drupal după apel Database::setActiveConnection('default', 'postgis'). De exemplu, a suna taxonomy_term_load_multiple_by_name() după Database::setActiveConnection('default', 'postgis') nu va funcționa, cu excepția cazului în care baza de date postgis/default conține o copie a tabelelor utilizate din Drupal. (De obicei, acesta nu este cazul, deoarece un modul care utilizează o altă bază de date nu va face o copie a tabelelor pe care Drupal se așteaptă să le găsească în acea bază de date.)
Înainte de a apela funcții precum taxonomy_term_load_multiple_by_name(), codul ar trebui să sune Baza de date::setActiveConnection(), care restabilește conexiunea activă la cea implicită utilizată de Drupal, care este pentru o bază de date care conține toate tabelele utilizate din Drupal.

Steffen  avatar
drapel cn
Mulțumesc foarte mult, am uitat să copiez metoda addConnectionInfo aici și am scris în loc de acesta parametrul în setActiveConnection(). Dar știți că cu cheia și ținta în setActiveConnection funcționează. Mulțumiri

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.