[PHP] Connectie maken met MSSQL

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Pykow
  • Registratie: Augustus 2007
  • Laatst online: 17:03

Pykow

Angelo OTR

Topicstarter
Beste Tweakers,

Allereerst mijn excuses als ik in het verkeerde topic zit op het forum.
Wij (mijn werk) hebben een website gemaakt die verbinding maakt met een MSSQL (Microsoft SQL database). Deze website draait bij meerdere klanten van ons en tevens ook op onze oude server.

Nu zijn wij overgegaan naar een nieuwe Server (een beetje gedwongen door de server provider).
Op deze nieuwe server hebben we een domein opgericht die keurig werkt, echter krijgen wij met onze website geen verbinding met de MSSQL server.

Nu is het zo dat onze server provider (en ik zal geen naam noemen) er voor heeft gezorgd dat onze "OUDE" server perfect werkt. Wij kunnen met een PHP pagina verbinding maken met een Microsoft SQL server.
Dit hebben ze toen ook keurig voor ons ingericht. Echter nu we een nieuwe server hebben bij dezelfde provider, lijken ze ons niet meer te kunnen helpen. na 100 mailtjes en telefoontjes krijgen we steeds te horen dat ze verder geen support kunnen leveren en dat 1 (één) persoon steeds afwezig is. Het is net KPN waarbij je ook steeds je vraag opnieuw moet stellen aan verschillende medewerkers (Geen helpdesk systeem).

Nu gaan we het toch maar zelf proberen, maar echter is hier in huis niet zoveel kennis van centOS (Unix server)

Mijn collega's hebben het volgende geinstalleerd:
FreeTDS, dit is een libary om programma's toe te staan te praten tegen een Microsoft SQL server, maar dat had geen effect.
MSSQL extensie van PHP de website maakt ook gebruik van MSSQL connecties.

in Windows maken we gebruik van SQLsrv extensie, maar natuurlijk is die niet te gebruiken op een Unix/linux server.

Kan iemand hier op dit forum ons de goede kant opsturen en tips geven hoe we een linux server kunnen laten communiceren met een Microsoft SQL server d.m.v. PHP pagina's.

Nogmaals onze website is actief op onze oude unix server, maar onze provider helpt ons niet verder.
Wij moeten het nu met weinig kennis zien op te lossen, We zijn namelijk allemaal Programmeurs en geen serverbeheerders.

Alvast bedankt voor de moeite en als er vragen zijn, kunt u deze altijd aan mij stellen.

Angelo NL / Global Cargo VTC


Acties:
  • 0 Henk 'm!

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 29-09 15:25
Wauw, wat een toeval. Gister met een collega (OSX) ook de hele dag hier mee lopen stoeien. Spoiler alert: nog geen oplossing gevonden :(
FreeTDS, [...] maar dat had geen effect.
Tegen welk probleem loop je aan? Krijg je een specifieke foutmelding?

Gebruik je ODBC of DB-LIB? PDO of niet?

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 19:38
Pykow schreef op woensdag 05 augustus 2015 @ 17:29:
Wij moeten het nu met weinig kennis zien op te lossen, We zijn namelijk allemaal Programmeurs en geen serverbeheerders.
Of iemand zoeken die er wel verstand van heeft ;)

Acties:
  • 0 Henk 'm!

  • Orthodroom
  • Registratie: December 2014
  • Niet online
Kan je op de oude server niet phpinfo uitvoeren om te zien welke extensies er allemaal op de server draaien?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
[Help] uit titel gesloopt: ✓
Move WEB >> PRG: ✓
[PHP] Tag in titel: ✓

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Kan je ook informatie geven wat er dan niet werkt? Random 'iets' 'installeren' zegt eigenlijk geen drol en daar kunnen we gewoon niets mee.

Wat wordt er uitgespookt? En waarom heb je een server als je die niet kan beheren?

Voor het installeren van een extensie die met je MSSQL server kan communiceren (zo open en bloot over internet? Selcht idee!) pak je gewoon je package manager er bij, installeer je de extensie, configureer je hem, en zet je hem aan.

Daarna kijk je met phpinfo(); of je webserver door heeft dat je met MSSQL kan praten, en als dat werkt, dan pas ga je in code kijken of je ergens komt. Zo niet: zoek het buiten PHP, ga dus netcatten, firewalls controleren, logs bekijken etc.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Lukt het wel om met ASP of ASP.NET een connectie te maken met de MSSQL?
Ook kun je proberen om verbinding te maken via PDO MSSQL (die overigens gebruik maakt van FreeTDS).
Wat is de foutmelding die het log geeft? Alle logs kun je vinden onder /var/log/ ;)
Is er geen handleiding of how to die jullie hebben gevolgd?

En anders heeft MS nog wel drivers voor je.

[ Voor 38% gewijzigd door CH4OS op 06-08-2015 19:15 ]


Acties:
  • 0 Henk 'm!

  • P-Storm
  • Registratie: September 2006
  • Laatst online: 13-10 15:15
Ik zou eerst een stap terug doen, kan je vanuit de machine een connectie maken?
Probeer eerst het IP te achterhalen. Daarna zou ik de connectie controleren, standaard poort voor SQL is 1433

Je kan altijd eerst even controleren met telnet.
Telnet <IP Address> <Port Number>

Je zult hiervoor wel het IP address voor moeten opzoeken.

Verder zou je nog bij Support Microsoft KB 927422 kunnen kijken.

Welke foutmeldingen krijg je, probeer je logs na te spitten waar het fout gaat, zoals je de vraag nu neer hebt gezet kan het vanaf firewall probleem zijn tot aan een configuratie op SQL server. Als je ook toegang hebt tot de SQL server, controleer dan of er een connectie poging gemaakt wordt, of de user in mag loggen, of de user rechten heeft op de database die het nodig heeft voor die pagina, etc etc.

offtopic:
Hele kleine kans, maar dubbel check je connection string.

Acties:
  • 0 Henk 'm!

  • Pykow
  • Registratie: Augustus 2007
  • Laatst online: 17:03

Pykow

Angelo OTR

Topicstarter
johnkeates schreef op donderdag 06 augustus 2015 @ 19:06:
Kan je ook informatie geven wat er dan niet werkt? Random 'iets' 'installeren' zegt eigenlijk geen drol en daar kunnen we gewoon niets mee.

Wat wordt er uitgespookt? En waarom heb je een server als je die niet kan beheren?

Voor het installeren van een extensie die met je MSSQL server kan communiceren (zo open en bloot over internet? Selcht idee!) pak je gewoon je package manager er bij, installeer je de extensie, configureer je hem, en zet je hem aan.

Daarna kijk je met phpinfo(); of je webserver door heeft dat je met MSSQL kan praten, en als dat werkt, dan pas ga je in code kijken of je ergens komt. Zo niet: zoek het buiten PHP, ga dus netcatten, firewalls controleren, logs bekijken etc.
We hebben het getest tegen onze eigen database server hier op de zaak en hierin hebben we de firewall goed open gezet om te kijken of het een probleem was van de SQL server, maar hier krijgen we geen connectie mee. Onze oude WEBSERVER kan wel verbinding maken met dezelfde SQL server.

We gaan kijken of we nog iets kunnen ontdekken op de server mbt firewall etc.
Orthodroom schreef op donderdag 06 augustus 2015 @ 18:44:
Kan je op de oude server niet phpinfo uitvoeren om te zien welke extensies er allemaal op de server draaien?
phpinfo geeft hetzelfde resultaat op beide servers en dus lijken de extensies goed geinstalleerd te zijn.
CptChaos schreef op donderdag 06 augustus 2015 @ 19:12:
Lukt het wel om met ASP of ASP.NET een connectie te maken met de MSSQL?
Ook kun je proberen om verbinding te maken via PDO MSSQL (die overigens gebruik maakt van FreeTDS).
Wat is de foutmelding die het log geeft? Alle logs kun je vinden onder /var/log/ ;)
Is er geen handleiding of how to die jullie hebben gevolgd?

En anders heeft MS nog wel drivers voor je.
Het is een linux server SQLsrv bestanden zijn voor Windows, Deze hebben wij ook ingebruik als we lokaal testen (met WAMP server) op onze windows systemen.

Mijn collega is nu aan de slag met de punten die hier zijn aangehaald.
Alvast bedankt

Angelo NL / Global Cargo VTC


Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 00:47
Ik heb recent ook nog webservers ingericht met Apache en PHP op Windows, daarbij was het een hel om de juiste php_mssql.dll te vinden. Mijn ervaring is ook dat de Microsoft drivers gewoon een stuk beter/sneller werken dan de oude mssql driver. Bij voorkeur dus gewoon PHP op Windows met de drivers van MS als je met een MSSQL server in de weer gaat.

In jouw geval gok ik dat SELinux op de webserver actief is en er geen policy is ingesteld om connecties met MSSQL toe te staan. Je kunt dan nog zoveel firewalls openzetten aan jouw kant, maar als SELinux vindt dat het niet mag, gebeurt het gewoon niet.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Pykow schreef op vrijdag 07 augustus 2015 @ 09:45:
We hebben het getest tegen onze eigen database server hier op de zaak en hierin hebben we de firewall goed open gezet om te kijken of het een probleem was van de SQL server, maar hier krijgen we geen connectie mee. Onze oude WEBSERVER kan wel verbinding maken met dezelfde SQL server.
Als de oude wel kan verbinden, dan kijk je toch naar de verschillen tussen de oude en de nieuwe? :?
_JGC_ schreef op vrijdag 07 augustus 2015 @ 10:00:
In jouw geval gok ik dat SELinux op de webserver actief is en er geen policy is ingesteld om connecties met MSSQL toe te staan. Je kunt dan nog zoveel firewalls openzetten aan jouw kant, maar als SELinux vindt dat het niet mag, gebeurt het gewoon niet.
Als aanvulling hierop: SELinux staat voor Security Enhanced Linux en behelst security policies op kernelniveau. Zet dus niet zomaar SELinux compleet uit, tenzij je weet wat je allemaal doet! Beste kun je even checken of SELinux op enforcing (strict) of permissive staat en dan eventueel aanpassen naar permissive, [google=Centos set SElinux permissive]. Schakel SELinux in elk geval niet uit, want dan krijg je er wat gratis security issues bij. Controleer in ieder geval eerst of inderdaad SELinux het blokkeerd of niet.

[ Voor 46% gewijzigd door CH4OS op 07-08-2015 10:17 ]


Acties:
  • 0 Henk 'm!

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54
Ik gebruik hiervoor PDO. (Zoals CptChaos al aangaf gebruikt dit FreeTDS)

PHP:
1
2
3
4
5
6
7
8
9
10
try {
    $dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
  } catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
  }
$dbh->exec("SET ANSI_WARNINGS ON");
$dbh->exec("SET ANSI_PADDING ON");
$dbh->exec("SET ANSI_NULLS ON");
$dbh->exec("SET CONCAT_NULL_YIELDS_NULL ON");


Ik heb bewust die 4 'SET' commando's er ook bij gezet, omdat, bij ons, anders queries errors geven die eigenlijk geen errors zijn.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
TheDevilOnLine schreef op vrijdag 07 augustus 2015 @ 12:00:
Ik heb bewust die 4 'SET' commando's er ook bij gezet, omdat, bij ons, anders queries errors geven die eigenlijk geen errors zijn.
Waarom pas je dit soort dingen niet gewoon op de database aan? Je hebt nu 4 magische 'SET's (nou ok, zo magisch zijn ze niet, het zijn gewoon opties en keuzes) waarbij je humor krijgt als iemand er ooit eens 3 gaat gebruiken of 5 of ... En je zal het veelal ook niet direct opmerken (want ansi_nulls zegt enkel iets over de afhandeling van null-waarden, het heeft geen invloed op query's zonder null-waarden).

In principe staan je php en je database server gewoon verschillend ingesteld (wat niet erg is als het bewust is gedaan of vanwege andere toegangen of ...) en wordt het alleen rechtgetrokken met die SET's, maar ik heb toch zoiets van : Trek het recht en verwijder de SET's dan elimineer je gewoon een mogelijk toekomstig foutenpunt.

Acties:
  • 0 Henk 'm!

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54
Gomez12 schreef op zaterdag 08 augustus 2015 @ 00:22:
[...]

Waarom pas je dit soort dingen niet gewoon op de database aan? Je hebt nu 4 magische 'SET's (nou ok, zo magisch zijn ze niet, het zijn gewoon opties en keuzes) waarbij je humor krijgt als iemand er ooit eens 3 gaat gebruiken of 5 of ... En je zal het veelal ook niet direct opmerken (want ansi_nulls zegt enkel iets over de afhandeling van null-waarden, het heeft geen invloed op query's zonder null-waarden).

In principe staan je php en je database server gewoon verschillend ingesteld (wat niet erg is als het bewust is gedaan of vanwege andere toegangen of ...) en wordt het alleen rechtgetrokken met die SET's, maar ik heb toch zoiets van : Trek het recht en verwijder de SET's dan elimineer je gewoon een mogelijk toekomstig foutenpunt.
Omdat de database door een mooi stuk software van de klant is gemaakt die niet meer werkt als wij dit op database niveau aanpassen. Maar dat is een bekend veel voorkomend probleem.

Maar ik ben het met je eens hoor, ik zou dit liever anders zien, in deze situatie is het helaas niet anders,

Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 00:07
Even bij het begin beginnen:

Er zijn dus 3 servers?

1) Windows Server met MSSQL erop
2) "oude" server met ongespecificeerd systeem waar een PHP site op draait
3) "nieuwe" server met centOS waar een PHP site op draait.

Dan is het een kwestie van vergelijken tussen server 2 en server 3.

In het geval dat 1 en 2 op dezelfde Windows machine draaien. Dan lijkt het me logisch en staat MSSQL gewoon ingesteld op het alleen toestaan van lokale verbindingen (=goed!).

Ik weet niet hoe ingewikkeld die MSSQL databases zijn maar als je toch over gaat naar centOS kan je die MSSQL setup dan niet overzetten naar Postgresql ofzo?

==edit==
Overigens moet je je door je hoster natuurlijk NERGENS toe laten dwingen. Als jullie bedrijf zich beter voelt bij Windows hosting (en dan ook productiever is!) dan moet je gewoon een hoster zoeken die dat jullie op een goede manier aan kan bieden!

[ Voor 17% gewijzigd door Ramon op 08-08-2015 10:14 ]

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/

Pagina: 1