Verbinding maken met een externe database via CodeIgniter

Kon geen verbinding maken met uw databaseserver met behulp van de opgegeven instellingen.

Ik had problemen met het verbinden van mijn applicatie met mijn database op afstand. Ik ontvang de bovenstaande foutmelding wanneer ik mijn applicatie start. Ik heb eerdere antwoorden op deze vraag op deze site bekeken, maar ik heb geen geluk gehad om het op te lossen. Van wat ik heb geleerd, moet ik de hostnaam vervangen en mijn mysql-database externe verbindingen laten accepteren, wat ik beide heb gedaan. Ik probeerde dezelfde waarden in mijn database.php via de opdrachtregel van MySQL en het werkt.

Dus wat kan ik nog meer missen?

Hier zijn mijn instellingen in database.php:

$active_group = 'staging';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'myDatabase';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

$db['staging']['hostname'] = 'XX.XX.XXX.XXX';
$db['staging']['username'] = 'user';
$db['staging']['password'] = 'pwd';
$db['staging']['database'] = 'myDatabase';
$db['staging']['dbdriver'] = 'mysql';
$db['staging']['dbprefix'] = '';
$db['staging']['pconnect'] = TRUE;
$db['staging']['db_debug'] = TRUE;
$db['staging']['cache_on'] = FALSE;
$db['staging']['cachedir'] = '';
$db['staging']['char_set'] = 'utf8';
$db['staging']['dbcollat'] = 'utf8_general_ci';
$db['staging']['swap_pre'] = '';
$db['staging']['autoinit'] = TRUE;
$db['staging']['stricton'] = FALSE;
7
Ik heb mijn vraag bewerkt met mijn databaseconfiguratie.
toegevoegd de auteur Mikey, de bron
hoe heb je het geprobeerd tot nu toe? geef de code van databaseconfiguratie.
toegevoegd de auteur Ariful Islam, de bron
lijkt het correct te zijn.
toegevoegd de auteur Ariful Islam, de bron

4 antwoord

probeer deze opdracht uit je shell om te zien of je verbinding kunt maken:

mysql -h HOSTNAME -uUSERNAME -p DATABASE

controleer ook of je geen andere poort hebt om verbinding te maken met MySQL set, standaard zal codeigniter verbinden met 3306, tenzij je de eigenlijke poortset definieert. dit kan het probleem zijn.

succes

4
toegevoegd
Ik kan verbinding maken met die opdracht. De poort is niet anders.
toegevoegd de auteur Mikey, de bron
Sorry voor het verwijderen van eerdere reacties, ik realiseerde me dat ik je opdracht niet correct heb geschreven. Nee, ik gebruik de staging-configuratie niet zo. Nee, ik laad mijn database alleen in de constructor als zodanig: $ this-> CI-> load-> database ().
toegevoegd de auteur Mikey, de bron
Van wat ik heb ontdekt, laadt het de juiste groep op, b.v. enscenering omdat de arraywaarden worden gebruikt wanneer het probeert verbinding te maken: return @ mysql_connect ($ this-> hostname, $ this-> gebruikersnaam, $ this-> wachtwoord, TRUE) op regel 70 van system/database/drivers/mysql/mysql_driver . Het is echter die regel die faalt en die mij tot deze fout leidde, zoals getoond in deze vraag . Hoe dan ook, bedankt voor je hulp!
toegevoegd de auteur Mikey, de bron
Het hielp, maar het loste mijn probleem niet op.
toegevoegd de auteur Mikey, de bron
De oorzaak van mijn fout was precies vanwege de oud wachtwoordschema dat werd gebruikt voor MySQL 4.1 . Helaas heb ik geen controle over de MySQL-server, dus moest ik mijn PHP-versie downgraden :(
toegevoegd de auteur Mikey, de bron
ja, je zou de MySQL prompt moeten zien, maar het lijkt erop dat je op windows zit omdat je een exe gebruikt, die opdracht is bedoeld voor unix gebaseerde machines. gebruikt u de staging-config om zo te verbinden: $ this-> db_staging = $ this-> CI-> load-> database ('staging', TRUE); ?
toegevoegd de auteur Robert Van Sant, de bron
ok, maar je hebt 2 definities gedefinieerd en aangezien het een array is, wordt de standaarddefinitie geretourneerd, dus je moet je verbindingsdefinitie opgeven. ik zou willen voorstellen om te definiëren welke verbinding je wilt gebruiken, want als je geen localhost db op je staging-server hebt staan, maar een externe verbinding, dan zal het mislukken en die fout oproepen
toegevoegd de auteur Robert Van Sant, de bron
heeft dit geholpen of gewerkt?
toegevoegd de auteur Robert Van Sant, de bron
welke driver je remote database gebruikt, controleer je MySQL config (mysql.cnf, geloof ik) om te controleren of het mysqli vs MySQL niet gebruikt
toegevoegd de auteur Robert Van Sant, de bron

mysql accepteert standaard alleen localhost-verbindingen, zorg ervoor dat uw server lokaal correct is geconfigureerd

http://www .cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database server.html

zorg ervoor dat uw server zich niet achter een router bevindt die zich in een privé-subnet bevindt, misschien moet u statische NAT configureren voor het portforwarden van uw server naar het web

3
toegevoegd
$active_group = 'staging';
$active_record = TRUE;

probeer de bovenstaande code te wijzigen in

$active_group = 'default';
$active_record = TRUE;
1
toegevoegd

Als u SELinux-beleid op uw server heeft afgedwongen, zorg er dan voor dat u de booleaanse vlag httpd_can_network_connect inschakelt

setsebool -P httpd_can_network_connect=1
0
toegevoegd