[PHP/MYSQL] 2 queries geeft error

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01 14:21

bluesbrother

Blues Rocks!!!

Topicstarter
Nou moe...
Op mijn werk was ik bezig met onderstaande script.
Ik denk het ligt aan mij. Maar nu weet ik het niet meer.

Als ik één van de 2 queries uitzet dan werkt het wel.
//$result1 = doquery($query2);
Als ze allebei na elkaar gedraaid worden zoals in onderstaande script dan krijg ik een error.

Op mijn werk gaf mysql_error aan dat er geen database geselecteerd zou zijn.
Thuis geeft hij aan dat de inloggegevens niet juist zouden zijn.
Access denied for user 'ODBC'@'localhost'
Dit vind ik vreemd aangezien als ik dus 1 querie laat draaien het wel goed gaat.
Dus de database is dan geslecteerd en de inloggegevens kloppen.

Ik werk zowel thuis als op mijn werk met mysql 5 en Php 5.
Onder windows mbv wampserver.


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
function connectdb(){
 
  include_once("inc/db_vars.inc.php");
  $link = mysql_connect($host, $login, $pass)
   or die("Ik kon geen verbinding maken" . mysql_error());
   mysql_select_db($dbname);
          echo mysql_errno() . ": " . mysql_error() . "\n";
          
  //print $dbname;
 
//  print ("<br />Verbinding gemaakt");
   return $link;
  }
 
 function doquery($query){
//  print $query;  
  
  $result = mysql_query($query,connectdb());
   
  return $result;
 
  mysql_free_result($result);
  
  }
  
$query1 = "SELECT * FROM mainmenu";
$result1 = doquery($query1);

$query2 = "SELECT * FROM mainmenu";
$result1 = doquery($query2);

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20:32
Je maakt elke keer dat je de functie doquery() aanroept, een nieuwe verbinding aan met de database. Misschien dat elke gebruiker maar 1 keer mag inloggen op MySQL, waardoor elke tweede verbinding er dus uitklapt ? :)

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Maak de connection in connectdb() inderdaad "gewoon" static, en als die al bestaat hoef je dus niets nieuws te maken.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function connectdb(){
 
  include_once("inc/db_vars.inc.php");

  static $link = null;

  if (is_null($link)) {
    $link = mysql_connect($host, $login, $pass)
     or die("Ik kon geen verbinding maken" . mysql_error());
     mysql_select_db($dbname);
            echo mysql_errno() . ": " . mysql_error() . "\n";
          
    //print $dbname;
 
  //  print ("<br />Verbinding gemaakt");
   }
   return $link;
  }

:)

Beter zou overigens zijn om je code wat aan te passen zodat de link ergens anders bijgehouden wordt en je niet steeds een functiecall hoeft te doen, maar dat is afhankelijk van de rest van je code. :)

[ Voor 15% gewijzigd door NMe op 17-05-2008 01:11 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01 14:21

bluesbrother

Blues Rocks!!!

Topicstarter
static, dat was hem. Ik heb de functie zoals hierboven gebruikt en nu gaat het goed.
Ik had ergens gelezen dat php een open verbinding automatisch gebruikt.
Ik heb hier van alles gepropeerd met het sluiten van de connectie,
freeën van result enz.
Maar dit was kennelijk de oplossing.
Mij is niet helemaal duidelijk wat je bedoeld met:
Beter zou overigens zijn om je code wat aan te passen zodat de link ergens anders bijgehouden wordt en je niet steeds een functiecall hoeft te doen, maar dat is afhankelijk van de rest van je code.
een apparte functie aanmaken die kijkt wat de status van de link is, en indien nodig opend door
connectdb() aan te roepen?

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Nee, gewoon een variabele $link aanmaken in je hoofdcode en die doorgeven aan alle functies die je aanroept en hem nodig hebben. Dat scheelt wat funtiecalls. Al voldoet de code die je nu gebruikt waarschijnlijk ook wel. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.