[php] mysqli connectie in includes

Pagina: 1
Acties:
  • 175 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jbweb
  • Registratie: Oktober 2004
  • Laatst online: 04-10-2023

jbweb

professional noob

Topicstarter
Ik ben net de eerste baby steps aan het maken met MySQL improved (mysqli)
Het kan dus zijn dat dit een absolute beginners vraag is, maar ik kom er niet helemaal uit.

Als ik in mijn index.php een connectie maak:
PHP:
1
2
3
4
5
6
7
session_start();
$mysqli = mysqli_init();
$mysqli->real_connect("host", "username", "password", "database");
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}


Krijg ik geen foutmeldingen. Ik kan zelfs een query draaien en krijg ook gegevens op beeld.
Maar als ik (na het maken van de connectie) een bestand include, bijv:
PHP:
1
include_once('includes/function.php');

Krijg ik de melding
Notice: Undefined variable: mysqli in /home/html/website/includes/function.php on line 7

Heeft dit te maken met het OO idee van mysqli, of doe ik iets anders basics verkeerd?

Als ik een leuke signature bedenk, zijn jullie de eerste die het weten


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Maak je de variabele $mysqli (niet echt een goede naam voor een var overigens) toevallig in een functie aan? Met andere woorden: is het niet een simpel te verklaren scope-probleem?

'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!

  • jbweb
  • Registratie: Oktober 2004
  • Laatst online: 04-10-2023

jbweb

professional noob

Topicstarter
Variabele naam komt rechtstreeks van php.net ;)

Maar nee, de index begint echt zoals mijn voorbeeld code, dus niet vanuit een functie.
Echter, in de includes/function.php gaat het wel om een functie waar hij gebruikt wordt:

PHP:
1
2
3
4
5
6
7
8
9
10
function some_function()
{
    $some_sql = "SELECT * FROM `tabel`";
    $result = $mysqli->query($some_sql);
    while ($some_rows = $result->fetch_assoc())
    {
        echo $some_rows['id'];
    }
    $result->close();
}


Zou dat er mee temaken kunnen hebben?

Als ik een leuke signature bedenk, zijn jullie de eerste die het weten


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

Ja, je moet wel eerst aangeven dat $mysqli als een globale variabele behandeld moet worden (deze is niet bekend binnen je functie) met het global keyword.

Acties:
  • 0 Henk 'm!

  • jbweb
  • Registratie: Oktober 2004
  • Laatst online: 04-10-2023

jbweb

professional noob

Topicstarter
Oké, domste vraag van de dag ;)

N.a.v. de global opmerking (klonk erg logisch trouwens) heb ik de volgende dingen geprobeerd:
PHP:
1
2
3
4
global $mysqli;
$mysqli = mysqli_init();
$mysqli->real_connect("host", "username", "password", "database");
...

PHP:
1
2
3
global $mysqli = mysqli_init();
$mysqli->real_connect("host", "username", "password", "database");
...

PHP:
1
2
3
$mysqli = mysqli_init();
global $mysqli->real_connect("host", "username", "password", "database");
...

en
PHP:
1
2
3
4
$mysqli = mysqli_init();
$mysqli->real_connect("host", "username", "password", "database");
global $mysqli;
...


Maar helaas, dit lijkt allemaal niet te werken :(

Als ik een leuke signature bedenk, zijn jullie de eerste die het weten


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

Het moet *IN* je functie. Een minuutje op de php site (http://php.net/global) had je het antwoord gegeven.

Acties:
  • 0 Henk 'm!

Verwijderd

Ben ik nou gek?
Het gebruiken van global was toch een bad practice?

Acties:
  • 0 Henk 'm!

  • Toolskyn
  • Registratie: Mei 2004
  • Laatst online: 22-06 11:01

Toolskyn

€ 500,-

Als je het wil ontwijken kun je het natuurlijk altijd meegeven als argument in je functie.

gewooniets.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 29 oktober 2007 @ 19:15:
Ben ik nou gek?
Het gebruiken van global was toch een bad practice?
Als je niet weet waarom je globals zou moeten vermijden, moet je globals vermijden.

Acties:
  • 0 Henk 'm!

Verwijderd

Je moet de variabele (zoals eerder gezegt) ín je functie als global definieren. Je connect scriptje klopt dus, maar in je functie moet je bovenaan
PHP:
1
2
3
4
function bla() {
global $mysqli;
// je overige code
}

zetten. Dan werkt het wel. En bovenstaand, op een gegeven moment zul je toch echt een global object moeten hebben om aan te spreken, of je die nou in een abstractie klasse verpakt of niet, hij zal ergens moeten staan en ergens aan te spreken zijn :).

(Het punt van globals is dat je snel in elkaars namespace zit. Bijvoorbeeld een waarde van een username in een 'user' klasse ofzo is helemaal niet relevant voor de meeste stukken code, die gooi je mooi in zijn eigen object (die weer onderdeel van een ander object kan zijn bijvoobeeld)

[ Voor 30% gewijzigd door Verwijderd op 30-10-2007 16:23 ]

Pagina: 1