Intro Meine Laravel-App verwendete mysql. Jetzt muss sie im Netzwerk des Unternehmens gehostet werden, in dem ich arbeite (ich bin ein Remote-Worker). Und diese Firma ist ein Microsoft-Peep, also muss ich die Laravel in ihren SQL Server integrieren.
Ich habe das in meiner .env
DB_CONNECTION=sqlsrv
DB_Host=ip.address.of.server
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=my_username
DB_PASSWORD=my_password
Nach der Verwendung des php artisan migrate
Error:
[PDOException]
could not find driver
Ich verwende Ubuntu, eine Remote-Box für mich (von meinem Arbeitgeber). Ich habe bereits versucht, SQL Server in meiner Laravel-App zu verwenden (auf meinem Windows-PC). Soweit ich mich erinnere, habe ich einige Texte in der xampp php.ini bearbeitet. Als Linux Neuling ist es mir zu schwer (da ich nur CLI verwendet habe).
BEARBEITET (neue Version)
Ich habe also bereits die Konnektivität von Ubuntu zum Datenbankserver erhalten. Ich habe den sqlcmd -S <Host> -U <username>
verwendet
und ich habe die Abfragen getestet (wie SELECT * from users_data
) und es funktioniert.
Jetzt habe ich den config/database.php
geändert und hinzugefügt.
'sqlsrv' => [
'driver' => 'MSSQL',
'Host' => env('DB_Host', 'Host.of.the.database'),
'database' => env('DB_DATABASE', 'my_database'),
'username' => env('DB_USERNAME', 'my_username'),
'password' => env('DB_PASSWORD', 'my_pass'),
'port' => '1433',
'prefix' => '',
],
aber ich habe einen Fehler bekommen:
[InvalidArgumentException]
Unsupported driver [MSSQL]
"MSSQL" ist der Name, den ich zum Konfigurieren des FreeTDS verwende.
Für diejenigen, die danach kamen
Vergewissern Sie sich, welche Version von PHP Sie verwenden (für mich Homestead, das derzeit PHP 7.1 verwendet, also habe ich PHP 7.1-Sybase installiert).
Sudo apt-get install freetds-common freetds-bin unixodbc php7.1-sybase
Und der Fahrer ist
'sqlsrv' => [
'driver' => 'sqlsrv',
'Host' => env('DB_Host', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'port' => env('DB_PORT', '1433'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
]
Sie können mit tsql sicherstellen, dass die Verbindungsinformationen korrekt sind
TDSVER=8.0 tsql -H Host -U Username -D DatabaseName -p 1433 -P Password
Hatte auch den could not find driver
-Fehler, der das Problem nach der Installation folgender Pakete behoben hat:
Sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase
Ich verwende jedoch den sqlsrv
Treiber, hier ist mein config/database.php
:
'sqlsrv' => [
'driver' => 'sqlsrv',
'Host' => env('DB_Host', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
Führen Sie immer Sudo apt-get upgrade
Aus, bevor Sie versuchen, diese Befehle auszuführen.
Danke, diese Antworten haben mir sehr geholfen. Bitte lassen Sie mich erklären, was ich mit Laravel/Homestead Vagrant Box Version 7.1.0 und PHP 7.3 gemacht habe.
Ich habe den Befehl Sudo apt-get install freetds-common freetds-bin unixodbc php7.3-sybase
In meiner virtuellen Homestead-Box ausgeführt.
Dieser Befehl veranlasste mich zweimal , entweder die lokale Konfigurationsdatei php.ini beizubehalten oder die "Installationsversion" zu verwenden. Ich habe mich beide Male für die Installer-Version entschieden und alles hat super funktioniert. Hier ist meine database.php-Datei in meinem laravel config-Ordner . Außerdem setze ich default => env('DB_CONNECTION', 'sqlsrv')
Stellen Sie bei der Installation von sybase sicher, dass sie mit der Version übereinstimmt, die Ihre VM verwendet.
Lauf
php --version
und dann die richtige sybase-Version installieren:
Sudo apt-get install freetds-common freetds-bin unixodbc php7.#-sybase
Wenn Sie Codierungsfehler erhalten, müssen Sie auch Ihre Konfiguration von freedts und php.ini aktualisieren. Ändern Sie die Datei /etc/freetds/freetds.conf so, dass sie wie folgt aussieht:
[global]
# TDS protocol version
tds version = 8.0
# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff
# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
client charset = UTF-8
# A typical Sybase server
[egServer50]
Host = symachine.domain.com
port = 5000
tds version = 5.0
# A typical Microsoft server
[egServer70]
Host = ntmachine.domain.com
port = 1433
tds version = 7.0
[mssql]
Host =
Port = 1433
tds version = 8.0
Fügen Sie dies Ihrer php.ini hinzu:
client charset = UTF-8