[php] Mysqli connect niet met database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
Hallo,

Ik ben een tutorial aan het volgen over het maken van een to-do list.
Hier gebruiken ze Mysqli om een connectie te leggen met de Mysql database.
Helaas wil dit maar niet lukken en blijf ik errors krijgen.
Ik gebruik de laatste Usbwebserver om scripts op te maken maar heb dit script ook getest op mijn dedicated server waar ik dezelfde errors kreeg.
Het betreft de volgende fout:

code:
1
2
3
4
5
6
Warning: mysqli::mysqli() [function.mysqli-mysqli]: (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (10061) in L:\Scripting Envoirment\UsbWebserver\Root\todo_list\source\to-do-list2\db.php on line 10

Waardoor de volgende andere fouten optreden:
Warning: mysqli::query() [function.mysqli-query]: Couldn't fetch mysqli in L:\Scripting Envoirment\UsbWebserver\Root\todo_list\source\to-do-list2\index.php on line 37

Notice: Trying to get property of non-object in L:\Scripting Envoirment\UsbWebserver\Root\todo_list\source\to-do-list2\index.php on line 39


Het eerste ik deed was kijken of mysqlI installed was, en dat is die.
Vervolgens heb ik gegoogled op (HY000/2003) en daar komt uit dat het iets vaags is en dat je niet localhost als host mag gebruiken (??). Daarom vanalles geprobeerd, http://localhost:8080/, 127.000.01 (zoiets) maar dit werkt ook allemaal niet. De database gegevens kloppen wel want met dezelfde gegevens en een standaard mysql connect lukt het wel in de loggen.
Als laatste de code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//db.php
<?php

// my database class

class Db {
    
    
    var $mysql;
    function __construct() {
        $this -> mysql = new mysqli('http://localhost:8080/', 'root', 'usbw', 'chat') or die( mysqli_connect_error());
    }
    
    function delete_by_id($id) {
        $query = "DELETE from todo WHERE id = $id";
        $result = $this->mysql->query($query) or die("There was a problem");
        
        if($result) return 'yay!';
    }
    
    function update_by_id($id, $description) {
        $query = "UPDATE todo
                 SET description = ?
                 WHERE id = ?
                 LIMIT 1";
                 
         if($stmt = $this->mysql->prepare($query)) {
            $stmt->bind_param('si', $description, $id);
            $stmt->execute();
            return "good job!";
         }
    }
    
} // end class
?>


Dimby

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
http://localhost:8080/
Sinds wanneer gebruik je http om met een database te kletsen? Volgens mij heb je hier uitsluitend localhost nodig en geen enkele verwijzing naar een protocol of poort. Het zou mij ook verbazen wanneer MySQL op poort 8080 zou zitten, dat is vrijwel altijd een alternatief voor poort 80, dus http. Poort 3306 ligt meer voor de hand.

Voorbeeldje uit de handleiding:
PHP:
1
2
3
4
5
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

// etc.
?>


Ps. dat "or die()" zal wel een tikfoutje zijn, of niet dan? 8)7

[ Voor 6% gewijzigd door cariolive23 op 05-06-2009 23:23 ]


Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
Helaas.... gewoon localhost werkt ook niet, had ik namelijk al geprobeerd.

Warning: mysqli::mysqli() [function.mysqli-mysqli]: (HY000/2003): Can't connect to MySQL server on 'localhost' (10061) in L:\Scripting Envoirment\UsbWebserver\Root\todo_list\source\to-do-list2\db.php on line 10

Or die had ik ook al gehaald maar baat ook niet

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 11-06 12:58
Zoals cariolive23 ook al aangaf gebruik je nooit http in dat geval..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//db.php
<?php

// my database class

class Db {
    
    
    var $mysql;
    function __construct() {
        $this -> mysql = new mysqli('127.0.0.1', 'root', 'usbw', 'chat', 3306) or die( mysqli_connect_error());
    }
    
    function delete_by_id($id) {
        $query = "DELETE from todo WHERE id = $id";
        $result = $this->mysql->query($query) or die("There was a problem");
        
        if($result) return 'yay!';
    }
    
    function update_by_id($id, $description) {
        $query = "UPDATE todo
                 SET description = ?
                 WHERE id = ?
                 LIMIT 1";
                 
         if($stmt = $this->mysql->prepare($query)) {
             $stmt->bind_param('si', $description, $id);
            $stmt->execute();
            return "good job!";
         }
    }
    
} // end class
?>


En ga verder naar of de service mysql actief is.

Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
@Manueltje22:
Je code werkt ook niet ... ik blijf dezelfde errors krijgen :(
De extension staat trouwens aan:

extension=php_mysql.dll
extension=php_mysqli.dll

Extra info uit de file:

[MySQLi]

; Maximum number of links. -1 means no limit.
mysqli.max_links = -1

; Default port number for mysqli_connect(). If unset, mysqli_connect() will use
; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
; compile-time value defined MYSQL_PORT (in that order). Win32 will only look
; at MYSQL_PORT.
mysqli.default_port = 3307

; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
mysqli.default_socket =

; Default host for mysql_connect() (doesn't apply in safe mode).
mysqli.default_host =

; Default user for mysql_connect() (doesn't apply in safe mode).
mysqli.default_user =

; Default password for mysqli_connect() (doesn't apply in safe mode).
; Note that this is generally a *bad* idea to store passwords in this file.
; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
; and reveal this password! And of course, any users with read access to this
; file will be able to reveal the password as well.
mysqli.default_pw =

; Allow or prevent reconnect
mysqli.reconnect = Off

---
EDIT;
Ik heb in een apart bestand het volgende bestand gemaakt en kreeg de volgende error:

Can't connect to MySQL server on 'localhost' (10061)

<?php
$mysql = @mysqli_connect('localhost','root','usbw','dgame') or die( mysqli_connect_error());
?>

[ Voor 9% gewijzigd door Dimby op 05-06-2009 23:49 ]


Acties:
  • 0 Henk 'm!

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 12-07-2021
Komt voor mij gewoon over alsof je mysql server niet draait.

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II


Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
Ik heb hetzelfde probleem op mijn dedicated, daarnaast doet een normale mysql_connect het wel :(

Acties:
  • 0 Henk 'm!

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 12-07-2021
Het enige wat ik er op dit moment over vind, is dat poort 3306 niet beschikbaar/bezet is.

Een mogelijk oplossing:
1. Edit the configuration file located at /etc/mysql/my.cnf -- Jij had Windows? Zal dus ergens anders staan :)
2. Find the line bind-address = 127.0.0.1. The default value 127.0.0.1 means that it will only accept connection from local machine. I change the value to 0.0.0.0 and save it
3. Restart MySQL by issuing /etc/init.d/mysql restart -- Heb je waarschijnlijk een programmaatje voor om MySQL server te herstarten


Rare is dan weer wel, dat de mogelijke oplossing niks met poortnummer te maken heeft :P Maar ja, ik heb gewoon paar Google resultaten bekeken :)

[ Voor 12% gewijzigd door wjzijderveld op 06-06-2009 01:07 ]

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 27-05 22:50

r0b

Telnet eens naar localhost 3306. Krijg je antwoord? Zo ja, wijzig dan mysqli.default_port in de php.ini naar 3306

Doe hetzelfde op je server en het zou moeten werken.
Op één of andere manier heb jij een gewijzigde mysqli.default_port entry in je php.ini gekregen; dit zegt tegen PHP "mysqli draait op poortje 3307" terwijl dat helemaal niet zo is. Vervolgens gaat een standaard mysqli verbinding op localhost door naar localhost:3307 (werkt niet) en een normale mysql verbinding naar localhost:3306 (werkt wel).
Alleen een kwestie van mysqli.default_port entry in php.ini wijzigen naar 3306 dus.

Mocht je php.ini niet willen of kunnen bewerken dan kan je het altijd nog forceren door :3306 achter localhost te plakken, bijvoorbeeld dit zal altijd poortje 3306 pakken, onafhankelijk van wat php.ini zegt:

PHP:
1
2
3
<?php
$mysql = @mysqli_connect('localhost:3306','root','usbw','dgame') or die( mysqli_connect_error());
?>
wjzijderveld schreef op zaterdag 06 juni 2009 @ 00:14: change the value to 0.0.0.0 and save it
Dat laat MySQL op alle interfaces luisteren; niet erg aan te raden en niet persé nodig, of mis ik iets? :)

[ Voor 109% gewijzigd door r0b op 06-06-2009 00:58 ]


Acties:
  • 0 Henk 'm!

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 12-07-2021
Zoals ik er bij zette, vond het zelf al raar.
Was zelf ook al beetje in de war :P Want was lokaal ook wat dingen aan het prutsen, maar wat voor poortnummer ik als parameter aan mysqli ook meegaf, ik kreeg altijd verbinding.
En het lijkt me inderdaad niet nodig om op alle interfaces te luisteren.

Maar ik dacht dat hij ook al met poortnummer geprobeerd had. (Tenzij hij Manueltje22 niet echt gekopieerd heeft zoals hij doet vermoeden)

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 27-05 22:50

r0b

wjzijderveld schreef op zaterdag 06 juni 2009 @ 01:07:
poortnummer ik als parameter aan mysqli ook meegaf, ik kreeg altijd verbinding.
Bedoel je daarmee het wijzigen van mysqli.default_port in php.ini? Kan zijn dat je daarvoor nog even apache moet herstarten voordat die wijziging van kracht is.

offtopic:
Of loop ik nu doorelkaar te blaten? Anyway, tijd om te slapen, t'is hier al 02:22 :z

[ Voor 12% gewijzigd door r0b op 06-06-2009 01:23 ]


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

r0b schreef op zaterdag 06 juni 2009 @ 01:22:
[...]

Bedoel je daarmee het wijzigen van mysqli.default_port in php.ini? Kan zijn dat je daarvoor nog even apache moet herstarten voordat die wijziging van kracht is.

offtopic:
Of loop ik nu doorelkaar te blaten? Anyway, tijd om te slapen, t'is hier al 02:22 :z
kan zijn? weet wel zeker ;)

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
een standaard mysql connect lukt het wel
Kortom, de MySQL-server luistert keurig naar de poort die met de PHP-mysql-functies wordt aangesproken. Waarschijnlijk is dat poort 3306.

Wanneer de PHP-mysqli-functies problemen geven, dat lijkt mij dit een probleem te zijn met de PHP-configuratie en niet met de MySQL-databaseserver. Er is reeds aangetoond dat de databaseserver werkt en naar poort 3306 (zelfde als hierboven) luistert. Na iedere wijziging in de configuratie moet Apache worden geherstart, dat is niets bijzonders.

Ps. Al even geprobeert of je met PDO de boel wel aan de praat krijgt? Lost je probleem niet op, maar wellicht zie je verschillen in de php.ini die e.e.a. kunnen verklaren.

Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
Bedankt iedereen voor het meehelpen met mijn probleem, maar ik heb het opgelost!

In zowel php.ini php2.ini en de settings.ini van USBwebserver heb ik de mysqli poort veranderd naar 3306 (ik de settings.ini van usbw de mysql poort). En toen deed hij het ineens.

Bedankt!

Acties:
  • 0 Henk 'm!

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 12-07-2021
r0b schreef op zaterdag 06 juni 2009 @ 01:22:
[...]

Bedoel je daarmee het wijzigen van mysqli.default_port in php.ini? Kan zijn dat je daarvoor nog even apache moet herstarten voordat die wijziging van kracht is.

offtopic:
Of loop ik nu doorelkaar te blaten? Anyway, tijd om te slapen, t'is hier al 02:22 :z
Nee, ik bedoelde echt de parameter :P Niet de configuratie optie.
Of ik nu:
PHP:
1
2
3
new mysqli('localhost','user','pass','db',3306);
// Of
new mysqli('localhost','user','pass','db',123423);

deed, ik kreeg altijd verbinding. Net alsof hij die parameter negeert?


Maar mooi dat het opgelost is nu in ieder geval!

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 14-06 20:03

Patriot

Fulltime #whatpulsert

wjzijderveld schreef op zaterdag 06 juni 2009 @ 11:57:
[...]


Nee, ik bedoelde echt de parameter :P Niet de configuratie optie.
Of ik nu:
PHP:
1
2
3
new mysqli('localhost','user','pass','db',3306);
// Of
new mysqli('localhost','user','pass','db',123423);

deed, ik kreeg altijd verbinding. Net alsof hij die parameter negeert?
Zou zomaar kunnen dat hij dat negeert omdat hij doorheeft dat MySQL op dezelfde machine draait? Ik denk zomaar dat hij dan niet via een verbinding 'buitenom' tegen MySQL gaat lopen praten.

Acties:
  • 0 Henk 'm!

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 12-07-2021
Patriot schreef op zondag 07 juni 2009 @ 19:22:
[...]


Zou zomaar kunnen dat hij dat negeert omdat hij doorheeft dat MySQL op dezelfde machine draait? Ik denk zomaar dat hij dan niet via een verbinding 'buitenom' tegen MySQL gaat lopen praten.
Huh? Mis ik iets, poortnummer kan lokaal toch gewoon gebruikt worden? Heeft toch niks met buitenom/binnenom te maken? Lijkt me namelijk lullig als je apache op 8080 wil draaien maar daarvoor een externe connectie nodig hebt.
Als een server op een bepaald poortnummer luistert, zou hij niet ook op alle andere poorten moeten luisteren toch?

Of ik begrijp je gewoon verkeerd ;)

[ Voor 9% gewijzigd door wjzijderveld op 07-06-2009 23:19 ]

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 14-06 20:03

Patriot

Fulltime #whatpulsert

wjzijderveld schreef op zondag 07 juni 2009 @ 23:18:
[...]


Huh? Mis ik iets, poortnummer kan lokaal toch gewoon gebruikt worden? Heeft toch niks met buitenom/binnenom te maken? Lijkt me namelijk lullig als je apache op 8080 wil draaien maar daarvoor een externe connectie nodig hebt.
Als een server op een bepaald poortnummer luistert, zou hij niet ook op alle andere poorten moeten luisteren toch?

Of ik begrijp je gewoon verkeerd ;)
Jup, je begrijpt me verkeerd :). Mijn aanname was dat als je met localhost connecte, hij niet 'buitenom' de PC connecte met de draaiende MySQL service, maar 'intern'. Met andere woorden: Hij stuurt geen request over het netwerk, maar begint direct tegen het draaiende MySQL proces te praten. In dat geval is de poort niet interessant. Maar goed, het was sowieso maar een gok.

Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Waarom is een poortnummer dan niet interessant? Hoe ga je het verschil maken bij een interne verbinding naar apache of MySQL of postgreSQL, of naar een ssh of een telnet? Intern of extern maakt niets uit, je hebt altijd een poort nummer nodig.

Ik heb het ook getest en in mijn test maakt het wel uit wat het poortnummer was. 3306 werkte en 3307 niet.

Wat een betere uitleg zou zijn is dat je kan instellen dat als er niet naar een 'niet'-standaard poort geconnecteerd wordt en dit lukt niet dat er dan de standaard poort gebruikt wordt. Maar ik denk eigenlijk niet dat er zo een optie bestaat.
Ik denk eerder dat wjzijderveld zijn error meldingen af had staan of dat die naar een log ipv het scherm geschreven worden en daardoor het niet zag als het mislukte.

[ Voor 51% gewijzigd door kluyze op 08-06-2009 09:12 ]


Acties:
  • 0 Henk 'm!

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 12-07-2021
kluyze schreef op maandag 08 juni 2009 @ 09:07:
Waarom is een poortnummer dan niet interessant? Hoe ga je het verschil maken bij een interne verbinding naar apache of MySQL of postgreSQL, of naar een ssh of een telnet? Intern of extern maakt niets uit, je hebt altijd een poort nummer nodig.
Ik snap nu wat hij bedoelt denk ik :)

Error meldingen staan lokaal vol aan hoor ;) Maar ging maar even verder kijken, en kwam door het 'localhost', daardoor ging hij via de socket connecten, en dus niet via TCP/IP

PHP:
1
$db = new mysqli('127.0.0.1', 'root', 'local', 'test', 3307);

Zo kreeg ik wel netjes de foutmelding.

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II

Pagina: 1