web-dev-qa-db-fra.com

Avertissement: mysqli_query (): impossible de récupérer mysqli

J'ai un problème où je ne peux pas récupérer le résultat de ma base de données MySQL (via PHP). J'utilise la même fonction dans d'autres endroits et cela fonctionne parfaitement. Cependant, à ce stade, je reçois toujours l'erreur "Avertissement: mysqli_query (): Impossible de récupérer mysqli". Les détails du problème sont expliqués ci-dessous. J'utilise une fonction assez similaire ailleurs (getAllCountries comme vu ci-dessous) dans mon PHP qui fonctionne parfaitement:

function getAllCountries()
{
    $result = db_query("SELECT countryid, name FROM country ORDER BY name ASC");

    echo "<select class=addresscountry name=country>";
    while($row = mysqli_fetch_array($result)) {
      echo '<option value="' . $row['countryid'] . '">' . $row['name'] . '</option>';
    }
    echo "</select>";

    mysqli_close(db_connect());
}

Le problème est donc le suivant:

J'ai un fichier php contenant le code suivant:

<?php
require 'includes/functions.php';

function getUserPicPath()
{
    $userid = $_SESSION['userid'];

    $result = db_query("SELECT picture FROM user WHERE userid='$userid'");

    while($row = mysqli_fetch_array($result)) {
        $picturepath = $row['picture'];
    }

    echo $picturepath;

    mysqli_close(db_connect());
}

mon fichier functions.php a la ligne suivante (avec d'autres fonctions non pertinentes):

require 'dbfunctions.php';

et mon dbfunctions.php ressemble à ceci:

<?php
function db_connect()
{
    require ".db_password.php";

    static $connection;

    if(!isset($connection)) {
        $connection = mysqli_connect('localhost',$username,$password,$dbname);
    }

    if($connection === false) {
        return mysqli_connect_error(); 
    }

    return $connection;
}

function db_query($query) 
{
    $connection = db_connect();

    $result = mysqli_query($connection,$query);

    return $result;
}

Dans mon PHP j'appelle la fonction suivante:

if ($userid == -1)
    {
        showNotAuthorizedPage();
    } else {
        myAccountPage();
    }

et la fonction myAccountPage () est déclarée dans le même fichier que la fonction getUserPicPath (), cette fonction getUserPicPath () est appelée comme suit:

<div id="tabs-2">
    <p><?php getUserPicPath(); ?></p>
  </div>

J'utilise les onglets ( http://jqueryui.com/tabs/#default ) sur ma page Web et c'est là que je veux l'appeler. La fonction myAccountPage () qui donne l'erreur suivante:

Warning: mysqli_query(): Couldn't fetch mysqli in C:\Users\Dennis\Documents\My Dropbox\xxx\zzz\www\Project Files\includes\dbfunctions.php on line 29
Call Stack
#   Time    Memory  Function    Location
1   0.0000  256880  {main}( )   ..\myaccount.php:0
2   0.0010  283328  myAccountPage( )    ..\myaccount.php:181
3   0.0070  285368  getUserPicPath( )   ..\myaccount.php:121
4   0.0070  285528  db_query( ) ..\myaccount.php:11
5   0.0070  285624  mysqli_query ( )    ..\dbfunctions.php:29

( ! ) Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\Users\Dennis\Documents\My Dropbox\me&roxy\WE\final project\Project Files\myaccount.php on line 13
Call Stack
#   Time    Memory  Function    Location
1   0.0000  256880  {main}( )   ..\myaccount.php:0
2   0.0010  283328  myAccountPage( )    ..\myaccount.php:181
3   0.0070  285368  getUserPicPath( )   ..\myaccount.php:121
4   0.0080  285768  mysqli_fetch_array ( )  ..\myaccount.php:13

( ! ) Notice: Undefined variable: picturepath in C:\Users\Dennis\Documents\My Dropbox\me&roxy\WE\final project\Project Files\myaccount.php on line 17
Call Stack
#   Time    Memory  Function    Location
1   0.0000  256880  {main}( )   ..\myaccount.php:0
2   0.0010  283328  myAccountPage( )    ..\myaccount.php:181
3   0.0070  285368  getUserPicPath( )   ..\myaccount.php:121

( ! ) Warning: mysqli_close(): Couldn't fetch mysqli in C:\Users\Dennis\Documents\My Dropbox\me&roxy\WE\final project\Project Files\myaccount.php on line 19
Call Stack
#   Time    Memory  Function    Location
1   0.0000  256880  {main}( )   ..\myaccount.php:0
2   0.0010  283328  myAccountPage( )    ..\myaccount.php:181
3   0.0070  285368  getUserPicPath( )   ..\myaccount.php:121
4   0.0100  285864  mysqli_close ( )    ..\myaccount.php:19
14
Dennis

Je pense que c'est parce que lorsque vous fermez la connexion à la base de données la première fois, vous oubliez de faire:

unset($connection);

Et puis, lorsque vous essayez de vous reconnecter à la base de données, il se désengage car il est toujours défini sur la connexion fermée.

12
hofan41