2014-07-26 15 views
11

Ich habe ein Problem, wo ich das Ergebnis von meiner MySQL-Datenbank (über PHP) nicht abrufen kann. Ich benutze die gleiche Funktion an anderen Orten und es funktioniert einwandfrei. An diesem Punkt bekomme ich jedoch den Fehler "Warnung: mysqli_query(): Ich konnte nicht mysqli abholen". Details des Problems werden nachstehend erläutert.Warnung: mysqli_query(): Ich konnte nicht mysqli

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()); 
} 

Also das Problem ist folgendes:

ich den folgenden Code ein PHP-Datei enthält ich an anderer Stelle eine ganz ähnliche Funktion verwenden (getAllCountries wie unten zu sehen) in meinem PHP, die perfekt funktioniert:

<?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()); 
} 

meine functions.php-Datei hat die folgende Zeile (zusammen mit anderen nicht-relevanten Funktionen):

require 'dbfunctions.php'; 

und meine dbfunctions.php sieht wie folgt aus:

<?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; 
} 

In meinem PHP-Dokument, das ich die folgende Funktion aufrufen:

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

und die myAccountPage() Funktion in der gleichen Datei wie die deklariert getUserPicPath() Funktion, diese getUserPicPath() Funktion wie folgt aufgerufen wird:

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

I die Laschen verwenden (http://jqueryui.com/tabs/#default) auf meiner Webseite und das ist, wo ich es in anrufen will Die myAccountPage() Funktion, die die folgenden Fehler gibt.

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 
+1

Das ist nicht die vollständige Information zur Verfügung. Genau wie Sie nach Verbindungsfehlern suchen, sollten Sie auch nach Abfragefehlern suchen. Ich bin nicht mit mysqli vertraut, aber wenn Sie das Handbuch öffnen, finden Sie Sachen mit 'Fehler' auf seinem Namen. –

+0

Warum führen Sie Ihre Abfrage in 'getUserPicPath()' zweimal aus? Was gibt dir das "Echo" nach dem ersten Anruf? – andrewsi

+1

Ich würde auch empfehlen zu überprüfen, was in mysqli_error() 'ist, so dass Sie sehen können, welchen Fehler die Datenbank zurückgibt – andrewsi

Antwort

12

Ich denke, es liegt daran, dass, wenn Sie die Datenbankverbindung das erste Mal zu schließen, vergessen Sie zu tun:

unset($connection); 

Und dann, wenn Sie erneut versuchen, die Verbindung zur Datenbank, es scheißt, weil es nach wie vor in die geschlossene Verbindung gesetzt.

-2

Sie haben Ihre Datenbankverbindung vergessen. Fügen Sie einfach die $connection Ihrer SQL-Abfrage:

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

    // enter code here 
} 
Verwandte Themen