2014-07-26 21 views
11

MySQL veritabanımdan (PHP aracılığıyla) sonucu alamıyorum bir sorunum var. Aynı işlevi başka yerlerde kullanıyorum ve kusursuz çalışıyor. Ancak bu noktada "Uyarı: mysqli_query(): mysqli getiremedi" hatasını almaya devam ediyorum. Problemin detayları aşağıda açıklanmıştır. Benim PHP (aşağıda görüldüğü gibi getAllCountries) Başka bir yerde oldukça benzer işlevi kullanmak mükemmel çalışır hangi: Aşağıdaki kodu içeren bir php dosyasına sahipUyarı: mysqli_query(): Mysqli getirilemedi

:

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

Yani sorun şudur:

require 'dbfunctions.php'; 
:

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

benim functions.php dosyası (birlikte olmayan diğer ilgili fonksiyonları ile) aşağıdaki satırı vardır

ve benim dbfunctions.php şöyle görünür:

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

ve myAccountPage() fonksiyonu ile aynı dosyasında bildirildi: Aşağıdaki fonksiyonu çağırmak benim PHP belgesinde

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

fonksiyonu olarak adlandırılan getUserPicPath() işlevi, bu getUserPicPath() aşağıdaki gibidir:

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

I tırnaklardan tutarak (Web sayfamda) ve ben onu aramak istediğiniz olmasıdır aşağıdaki hata veriyor myAccountPage() fonksiyonu:.

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

Bu tam bilgi mevcut değil. Tıpkı bağlantı hatalarını kontrol ettiğiniz gibi, sorgu hatalarını da kontrol etmelisiniz. Ben mysqli ile aşina değilim ama eğer kılavuzu açarsanız isminde 'error' ile bir şeyler bulacaksınız. –

+0

Sorgunuzu niçin 'getUserPicPath()' iki kez çalıştırıyorsunuz? İlk görüşmeden sonraki 'echo' size ne veriyor? – andrewsi

+1

Ayrıca mysqli_error() 'da neyin olduğunu kontrol etmenizi öneririm, böylece veritabanının hangi hatadan geçtiğini görebilirsiniz – andrewsi

cevap

12

ben öyle düşünüyorum çünkü veritabanı bağlantısını ilk kez kapattığınızda, Tek yapmanız unutmak:

unset($connection); 

Ve yeniden veritabanına bağlanmayı deneyin zaman hala kapalı bağlantısına ayarlandığı için, sonra dışarı kreps.

-2

Veritabanı bağlantınızı dahil etmeyi unutmuşsunuzdur. Sadece $connection sql sorgunuza ekleyin:

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

    // enter code here 
}