MySQL error: No database selected

Plaats reactie
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

Daarnet had ik iets vreemd voor, en kben al een aantal uren bezig met het op te lossen, maar het lukt niet. Op het eerste zicht lijkt het gemakkelijk: ik krijgt de volgende error:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\wwwroot\horeca\action.php on line 24
No database selected

In action.php heb ik ondermeer hetvolgende staan:

Code: Selecteer alles

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM profile WHERE profile_name='$username' AND profile_password='$password'";
$sql = mysql_query($query);
if (mysql_num_rows($sql) == 1){ // = line 24
   $row = mysql_fetch_array($sql);
   while (list($key, $val) = each($row)) {
      session_register($key);
      $_SESSION[$key] = $val;
   }
}

in db.php hetvolgende:

Code: Selecteer alles

$host = "localhost";
$user = "root";
$password = "";
$database = "horeca";   
@$connection = mysql_pconnect($host, $user, $password) or die ("Couldn't connect to server.");
@$db = mysql_select_db($database);

De database bestaat en tabel ziet er zo uit:

Code: Selecteer alles

CREATE TABLE `profile` (
  `profile_id` int(25) NOT NULL auto_increment,
  `profile_name` varchar(25) character set latin1 collate latin1_general_ci NOT NULL default '',
  `profile_password` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`profile_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Teneinde raad vraag ik hier hulp, wat doe ik fout?

Stino...
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Doe eens een mysql_error() ?

Dus ipv

Code: Selecteer alles

$sql = mysql_query($query); 
doe je

Code: Selecteer alles

$sql = mysql_query($query) or die(mysql_error()."<br>".$query); 

En daarnaast is je resultaat ook efficienter te tonen via:

Code: Selecteer alles

while ($row = mysql_fetch_array($sql)) { 
// doe uw stuff;
}


Ik zie net dat in uw connection-file ge in de select_db uw connectie niet opgeeft, kijk naar de notatie:

@$db = mysql_select_db($database,$connection);
Gast

meon schreef:Doe eens een mysql_error() ?

Dat geeft: "No database selected", meer niet

meon schreef:Ik zie net dat in uw connection-file ge in de select_db uw connectie niet opgeeft, kijk naar de notatie:
@$db = mysql_select_db($database,$connection);

Dat was ik vergeten terug te zetten, ik had gelezen bij iemand met hetzelfde probleem dat het hielp die connection weg te laten. Ondertussen staat het terug zoals het hoort. Geen van beide manieren werken.

*zoekt verder*
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Ik ga nu iets doms zeggen eh, maar ge include , required uw db.php toch voor ge die query doet eh? :)
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

Jep, heb net tevergeefs vanalles zitten proberen met include(), include_once, require() en require_once().
Kheb ook de database geflushed, en een andere db geprobeerd, zonder resultaat.
Het zal iets voor morgen worden dan, waarschijnlijk zie ik iets kleins over het hoofd.

Stino...
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

Hmm, iets vreemds, is dit normaal:

Ik doe in een pagina een include('inc/header.php');
In header.php doe ik include_once('include.php');
In include.php doe ik require('db.php') en nog een aantal andere.

Ik dacht dat dit wel zou werken, maar blijkbaar moet ik bij elke pagina waar ik header.php include, die 'inc/db.php' nog eens apart gaan includen ook. Hoedanook, als ik het op die manier doe werkt het wel, wat mij vreemd lijkt...

Stino...
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

open_basedir

Is een instelling op apache-niveau, dat een include-in-include niet werkt.

Heb je PHP in safe mode draaien?
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

PHP staat niet in safe mode,
Nu heb ik de open_basedir in php.ini aangepast naar open_basedir = d:\wwwroot, maar ook dit helpt niet. Maar het is niet op mijn apache + php installatie dat ik de files ga moeten zetten, dus ik zal het momenteel bij mij oplossing nog houden...
Bedankt voor alle hulp meon!

Stino...
Gebruikersavatar
ban
Pro Member
Pro Member
Berichten: 232
Lid geworden op: 22 maa 2004, 16:21

ik denk inderdaad ook dat de oorzaak van je problemen in de includes zit.
kan je misschien niet gewoon de bijhorende mysql_connect en mysql_select_db statement in deze file plakken, en checken of het dan wel werkt ?
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

Ja inderdaad ban, zo heb ik het dan maar opgelost, hoe onelegant het ook is. Nu staat er dus: include('header.php'); include('db.php') :-(.
Gebruikersavatar
ban
Pro Member
Pro Member
Berichten: 232
Lid geworden op: 22 maa 2004, 16:21

stino, ik heb hier even zitten testen, en dat blijkt toch te werken hoor:

test1.php
<?php
$value = 'test1';
include('test2.php');
echo $value."\n";
?>

test2.php
<?php
$value = 'test2';
include('test3.php');
?>

test3.php
<?php
$value = 'test3';
?>

colinux:~/test# php test1.php
test3
colinux:~/test#
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

Bij mij zit het zo:

/
---index.php
/inc
---header.php
---db.php
---settings.php
---footer.php
---include.php
---functions.php

inc/db.php

Code: Selecteer alles

$connection = mysql_pconnect($host, $user, $password) or die ("Couldn't connect to server."); 
$db = mysql_select_db($database, $connection);

inc/include.php

Code: Selecteer alles

include('db.php'); include('settings.php'); include('functions.php');

inc/header.php

Code: Selecteer alles

include('include.php');

index.php

Code: Selecteer alles

include('inc/header.php');
$sql = mysql_query("SELECT * FROM bla");
while ($row = mysql_fetch_array($sql)) {
    ...
}


Blijkbaar heb ik het voor mij iets te ingewikkeld gemaakt, en zit ik een niveau te diep. Als ik uw voorbeeld uitbreid tot test4.php gaat het ook niet meer. Ik zal het dus op een andere manier moeten doen waarschijnlijk.

Stino...
Gebruikersavatar
ban
Pro Member
Pro Member
Berichten: 232
Lid geworden op: 22 maa 2004, 16:21

en als ik het dan goed heb begrepen zitten de definities van database username, password enzo in settings.php ?

in dat geval is de oplossing simpel :

in include.php, verander:
include('db.php'); include('settings.php'); include('functions.php');

in:
include('settings.php'); include('db.php'); include('functions.php');

:p
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

Sorry ban, mijn fout :oops:, ik had niet de volledige db.php laten zien hierboven:

Code: Selecteer alles

<? 
   $host = "localhost";
   $user = "root";
   $password = "";
   $database = "horeca";   
@$connection = mysql_pconnect($host, $user, $password) or die ("Couldn't connect to server.");
@$db = mysql_select_db($database, $connection);
?>


Stijn...
Gebruikersavatar
Erik
Elite Poster
Elite Poster
Berichten: 1321
Lid geworden op: 15 sep 2002, 02:46
Uitgedeelde bedankjes: 2 keer
Bedankt: 18 keer

well correct me if i'm wrong maar deze regel

Code: Selecteer alles

@$connection = mysql_pconnect($host, $user, $password) or die ("Couldn't connect to server."); 


ge gebruikt daar een opende ' (single quote) maar je sluit die quote nergens af en daar zal de PHP parser over klagen.Ook waarom zet ge die "@" voor uw code.Dit is de zogenaamde "silent mode" als er een fout gebeurt in uw script(s) zal de desbetreffende regel geen deftige foutmelding geven.

misschien is het "grammatisch" niet zo correct ik ben geen specialist in de engelse taal maar kan je dat niet veranderen in

Code: Selecteer alles

$connection = mysql_pconnect($host, $user, $password) or die ("Cannot  connect to server."); 


just my two cents
Registered Linux user #286313
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Jij hebt het over die ' in Couldn't ? Aangezien die blok tussen dubbele aanhalingstekens staat is die volledig een string en moet dat teken niet expliciet nog een geëscaped worden. Het was inderdaad anders moesten er single quotes zijn gebruikt voor de string-blok.

Die @ kan je wel degelijk zetten, je hebt namelijk je foutafhandeling in een nette error gezet in de 'or die()'.

Maar Erik, ge haalt hier wel een topic naar boven die al meer dan een jaar oud is... Ik gok dat het probleem zich ondertussen al lang niet meer stelt ...
Stino
Plus Member
Plus Member
Berichten: 163
Lid geworden op: 03 jan 2004, 13:49

meon schreef:Ik gok dat het probleem zich ondertussen al lang niet meer stelt ...

Inderdaad, weet niet meer hoe ik het heb opgelost. De cannot connect zal ik onthouden.
Plaats reactie

Terug naar “Development”