PDO query, 'De verbinding werd geherinitialiseerd' melding

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Ik heb sinds enkele maanden een eigen server. Nu probeer ik een applicatie te schrijven met hulp van Zend Framework. Dit werkt niet echt lekker, aangezien ik, wanneer er een query op de database adapter uitvoer met de methode query(), dan krijg ik in Firefox de melding:
De verbinding werd geherinitialiseerd
De verbinding met de server werd geherinitialiseerd tijdens het laden van de pagina.
Dus ik eens proberen, connectie maken direct met PDO:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$username = 'username';

/*** mysql password ***/
$password = 'password';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password);
    /*** echo a message saying we have connected ***/
    echo 'Connected to database';
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }


Dat werkt, er staat Connected to database. Wanneer ik op $dbh de methode query() aanroep, krijg ik weer de zelfde fout als wanneer ik op een instantie van Zend_Db_Adapter_Pdo_Mysql die methode aanroep.

Ik kom er nu niet meer uit. En het vervelende is, met wat voorheen altijd nog geen twee minuten werk was met ZF heeft me nu al twee uur gekost. Ik zou niet weten waarin dit ligt, PDO MySQL is gewoon geïnstalleerd en PHP is er mee gecompiled (haal ik uit phpinfo()). De verbinding maken lukt gewoon, een query uitvoeren wil niet. En geen foutmelding van PHP zelf maar 'Verbinding werd geherinitialiseerd'. Zeg het maar, ik ben ten einde raad.

Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Nu online

mace

Sapere Aude

Heel suf misschien en wellicht helemaal verkeerd maar iets zegt me dat je in de problemen komt met die dubbele quote om die PDO string heen, omdat er een puntkomma in zit.

edit: dat laatste is onzin

[ Voor 10% gewijzigd door mace op 14-04-2012 14:22 ]


Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Niet geprobeerd, echter zou het heel vreemd zijn als dat het was, aangezien Zend_Db het zelfde probleem heeft, en dat in principe niet veel meer is dan een wrapper om de zelfde PDO klasse.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:43

Ventieldopje

I'm not your pal, mate!

Wat als je PDOException vervangt met Exception? Anders zou je ook kunnen kijken in het error log (als je daar bij kan)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • jeroen_
  • Registratie: Januari 2010
  • Laatst online: 15:54
Probeer hem zo is:
PHP:
1
$dbh = new \PDO('mysql:dbname=mysql; host=$hostname, $username, $password');


Deze opbouw gebruik ik zelf ook. De quote's zitten hier in zijn geheel om de PDO heen.

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
In niet een log staat iets, ook niet met Exception.
Apache error/access logs is niets in te vinden.

Het ligt in mijn ogen niet aan de notatie, Zend_Db geeft namelijk het zelfde probleem.

Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 26-08 22:21
jvleusden schreef op zaterdag 14 april 2012 @ 14:33:
Probeer hem zo is:
PHP:
1
$dbh = new \PDO('mysql:dbname=mysql; host=$hostname, $username, $password');


Deze opbouw gebruik ik zelf ook. De quote's zitten hier in zijn geheel om de PDO heen.
De officiele constructor is nog steeds new PDO( $dsn, $user, $password).

@OP: Heb je al eens geprobeerd om error mode te veranderen en errorInfo() al eens aangeroepen ?

PHP:
1
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


errorInfo() kan je als het goed is zowel aanroepen als de databasehandler als een statementhandler.

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Doet ook niets, geef foutmeldingen, niets.
PHP:
1
2
3
4
5
6
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $dbh->prepare("SELECT * FROM client");
    if (!$stmt) {
        echo "\nPDO::errorInfo():\n";
        print_r($stmt->errorInfo());
    }

Acties:
  • 0 Henk 'm!

  • jeroen_
  • Registratie: Januari 2010
  • Laatst online: 15:54
C0rnelis schreef op zaterdag 14 april 2012 @ 14:52:
De officiele constructor is nog steeds new PDO( $dsn, $user, $password).
Weer wat geleerd :)

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
code:
1
2
3
4
5
6
7
8
9
10
PDO
PDO support enabled
PDO drivers     mysql, sqlite, sqlite2

pdo_mysql
PDO Driver for MySQL    enabled
Client API version  5.1.61

Directive   Local Value Master Value
pdo_mysql.default_socket    /var/lib/mysql/mysql.sock   /var/lib/mysql/mysql.sock


Dit betekent toch dat PDO ok is geïnstalleerd? Het gaat om een standaard CentOS installatie met Direct Admin, niets aangepast of wat dan ook. Zou toch out of the box moeten werken?

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Ik kom dit ineens tegen in m'n Apache logs:
code:
1
[Sat Apr 14 16:29:49 2012] [notice] child pid 22568 exit signal Segmentation fault (11)


Het schijnt te maken te hebben dat PHP of Apache (unlikely volgens mij) geheugen probeert te gebruiken wat niet van het proces is. Geen idee wat dit betekent laat staan hoe ik het oplos. Iemand die hier wél wat mee kan? Het enige wat ik kan vinden is: http://stackoverflow.com/...ault-11-in-apache-error-l
Echter worden daar niet echt nuttige antwoorden gegeven aangezien het niet over PDO gaat.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Is die melding in Firefox een browser melding? Hij staat in het Nederlands, dus dat is wel mijn verwachting. Er kunnen wat problemen zijn met sommige installaties (toevallig Linux met Zend Server?) waar je 127.0.0.1 moet gebruiken in plaats van localhost.

Hier kom je achter door gewoon je php scriptje te gebruiken waar je een PDO instance aanmaakt, maar wel met error reporting vol open:
PHP:
1
2
3
error_reporting(-1);
ini_set('display_errors', '1');[
// Hier de rest

Dan zie je een mysql tmp socket probleem, als je daarop Googled kom je uit op bovenstaande oplossing. Als dit niet het geval is, zal error reporting wellicht een andere melding geven die relevant kan zijn.

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Het is inderdaad een browsermelding van Firefox zelf (met een geel/oranje gevarendriehoek).
Chrome geeft:
Fout 324 (net::ERR_EMPTY_RESPONSE): De server heeft de verbinding verbroken zonder gegevens te verzenden.

Ik heb 52 dagen geleden de server met een schone CentOS 5 installatie opgeleverd gekregen. Hier heb ik zelf Direct Admin op gegooid en verder niets aan veranderd. Wat DA gebruikers geïmporteerd van een andere server en klaar. PHP heb ik geupdate van 5.2.x naar 5.3.10.

Jouw error reporting regels halen wederom niets uit en in Apache log krijg ik nog steeds die Segmentation fault.

Ik sta op het punt om het gewoon op te geven. Ben al vanaf 12:00 bezig, en ik dacht even snel in een half uurtje een leuke applicatie met een aantal simpele functies in elkaar te draaien. Mooi m'n dag naar de knoppen...

Acties:
  • 0 Henk 'm!

  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Wat er gebeurd is dat apache/php een segmentation fault geeft bij het uitvoeren van de code, waarna het process op de server direct beëindigd wordt. De verbinding met de webbrowser valt dus direct weg en daar komt de foutmelding van firefox vandaan.

Dit is dus geen fout in je php code, maar een fout in de apache/php/mysql combinatie.

Probeer apache eens te herstarten door hem eerst volledig te sluiten en dan weer te starten (service httpd stop; service httpd start)

[ Voor 16% gewijzigd door Devil op 14-04-2012 17:19 ]

After all, we are nothing more or less than what we choose to reveal.


Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Ok, duidelijk dus. Maar dan de vraag, hoe kom ik er achter waar dit zit?
Mijn eerste gok is PHP zelf. Momenteel ben ik aan het upgraden naar PHP 5.4 (had 5.3.10). Wie weet is het ineens verholpen. Ik ben radeloos.

Acties:
  • 0 Henk 'm!

  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Waar het zit is niet zomaar te zeggen. Gezien de code waarop het foutgaat waarschijnlijk ergens in de php mysql pdo driver. Misschien gebruik je een verkeerd (verouderde) versie van deze module. Of misschien zit er een fout in de mysql libs (verkeerde versie).

Als je nog niet heel veel in de database hebt staan kan het ook helpen om mysql opnieuw te installeren.

After all, we are nothing more or less than what we choose to reveal.


Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
PHP naar 5.4 updaten heeft niets uitgehaald.
Zal het wat uithalen om MySQL te updaten van 5.0 naar 5.5?
Dan heb ik nog de laatste optie om Apache te updaten van 2.2.22 naar 2.4 daarna.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:43

Ventieldopje

I'm not your pal, mate!

Ik zou inderdaad Apache updaten naar de laatste stable versie ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

GWTommy schreef op zaterdag 14 april 2012 @ 17:56:
Zal het wat uithalen om MySQL te updaten van 5.0 naar 5.5?
Is sowieso een aanrader, niet zozeer alleen voor de opgeloste bugs, alsmede een dikke performance winst die je ervoor terugkrijgt. :)

Ook is het een idee om - zoals aangegeven door mithras in "PDO query, 'De verbinding werd geherinitialiseerd' melding" - error reporting aan te zetten, wellicht krijg je daar een boel debug informatie uit.

[ Voor 28% gewijzigd door CH4OS op 14-04-2012 19:38 ]


Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Ik had een geweldig idee. Namelijk lokaal eens testen. Dit heb ik op OSx gedaan met Apache 2.2.22 en PHP 5.3.8 (beide voor geïnstalleerd door OSx zelf) en toen eens naar de server contact gemaakt met MySQL met het zelfde stukje code (MySQL dus op de server, de rest lokaal). Dat werkte allemaal perfect. Toen eens in phpinfo() gekeken lokaal. De PDO driver daar is de volgende:
code:
1
PDO Driver: mysqlnd 5.0.8-dev - 20102224 - $Revision: 310735 $

Het 'mysqlnd' doet het 'm dus. Even gezocht wat dit is, MySQL Native Driver.
Ik gok dus als ik deze update dat het dan remote ook gaat werken. Iemand die weet hoe ik dit voor elkaar krijg? Zowel de MySQL docs als PHP docs zeggen niets over PDO drivers updaten.

MySQL ga ik binnenkort ook updaten, echter heb ik liever eerst dat ik door kan met coden. Thnx in ieder geval voor de tip!

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Volgens mij worden de ND drivers default meegeleverd vanuit PHP of vanuit MySQL. Check dus even of je het laatste php5-mysql package geïnstalleerd hebt voor CentOS met 'yum update && yum upgrade' (of iets dergelijks, weet niet meer precies).

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Oeh. Ik doe dit liever via Direct Admin. Dit is wat ik net heb gevolgd om naar 5.4 te updaten:
http://www.directadmin.co...43032&p=218388#post218388

Ik zou toch denken dat dat dan ook mysqlnd driver met zich mee brengt. Niet?

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 17:22
GWTommy schreef op zaterdag 14 april 2012 @ 19:52:
Oeh. Ik doe dit liever via Direct Admin. Dit is wat ik net heb gevolgd om naar 5.4 te updaten:
http://www.directadmin.co...43032&p=218388#post218388

Ik zou toch denken dat dat dan ook mysqlnd driver met zich mee brengt. Niet?
PHP levert ze wel mee maar worden niet gebruikt zonder dat jij het zegt. Zie ook: http://help.directadmin.com/item.php?id=252 hoe je PHP opnieuw kunt compilen.

Waarschijnlijk maak je gebruik van custombuild v2 waardoor je configure.php54 moet bewerken i.p.v. configure.php5. Bewerk dit bestand en zoek --with-mysql / --with-mysqli / --with-pdo-mysql en maak daar het onderstaande van:
--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd

Daarna ./build php n en als dat klaar is maak je gebruik van de mysqlnd driver.

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Ok nu heb ik een klein probleempje.
Na PHP te hebben gecompiled met die waarden, zijn de websites van mijn klanten niet meer in staat om te verbinden met MySQL server. Ik probeerde nu om PHP weer te compilen met de oude opties. Volgens mij was dat:
code:
1
2
3
--with-mysql=/usr \
--with-mysqli=/usr/bin/mysql_config \
--with-pdo-mysql=/usr \

Echter blijf ik tijdens het compilen nu de fout krijgen dat het lezen van configure.php5 niet goed gaat. Geen idee wat er fout is. Echter is dit wel even een vervelende situatie. Iemand?

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Tip voor de volgende keer: maak eerst een kopie van het bestand, of probeer een dergelijke aanpassing eerst uit op een testserver.

Overigens wel vreemd dat het niet werkt voor klanten, wat is de error die nu verschijnt op hun webpagina's dan, misschien is het makkelijker dat op te lossen dan alles terug te draaien. ;)

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 17:22
@GWTommy, --with-mysql etc. zonder pad opgeven, laat het systeem ze zelf maar even zoeken.

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Met:
code:
1
2
3
--with-mysql=/usr \
--with-mysqli=/usr \
--with-pdo-mysql=/usr \

ging het compilen niet, met bovenstaande code wel.

Constatatie hier is dus over gelukkig.

@CptChaos: geen error, dat wordt netjes afgehandeld. Echter kreeg ik met mijn PDO statement de volgende error: SQLSTATE[HY000] [2002] No such file or directory

Gewone mysql_*() functies werken nu goed, kan ik ook alleen voor --with-pdo-mysql mysqlnd opgeven? Alleen dan zit ik weer met het probleem dat die socket of whatever niet gevonden kan worden: http://stackoverflow.com/...s-exception-sqlstatehy000

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Om na meer dan een week hier nog even op terug te komen (en in de hoop dat ooit iemand die tegen het zelfde aanloopt hier terecht komt): ik heb PHP gecompiled met de mysqlnd drivers, maar alleen voor PDO MySQL, niet voor mysql_*() en mysqli_*() functies aangezien die toch al werkten. Dat deed de truc en nu werkt alles zoals het hoort.
Hiervoor heb ik wel het volgende nog gedaan:
http://www.directadmin.com/features.php?id=140
met socket=/var/lib//mysql/mysql.sock aangezien ik CentOS draai.

Bedankt allen voor de hulp.
Nadat ik eindelijk bedacht had dat ik dit natuurlijk alleen voor PDO MySQL kon doen, was het binnen een halve minuut opgelost (PHP hercompilen duurde natuurlijk wat langer).
Pagina: 1