2016-03-24 29 views
0

taşındı MySQL sorgusu ile ilgili komutPHP MySQL önemli hata sonra ben localhost Uygulamamı test edilmiş ve çok iyi çalışıyor olması gerçek sunucuya

class Test { 

    public function check_duplicate_username($username, $mysqli) 
    { 
     $sql = $mysqli->prepare("SELECT username FROM `account` WHERE username=?"); 
     $sql->bind_param('s', $username); // line 44 
     $sql->execute(); 

     $res = $sql->get_result(); 

     if($res->num_rows !== 0){ 
      return false; 
     } 

     return true; 
    } 

    public function get_main_cate($mysqli) 
    { 
     $sql = $mysqli->query("SELECT name FROM `category` ORDER BY `id` DESC"); 

     if($sql->num_rows > 0){ 
      return $sql; 
     }else{ 
      return false; 
     } 
    } 

} 

sonucunu almak için, ölecek :

PHP Fatal error: Call to a member function bind_param() on boolean in /path/to/html/root/classes/test.php on line 44

[24-Mar-2016 02:36:26 America/Chicago] PHP Fatal error: Call to a member function fetch_object() on boolean in /path/to/html/root/sign-up.php on line 134

bu konuda neyi var: hata günlükten

$test = new Test; 

if(!$test->check_duplicate_username($email, $mysqli)){ 
    $data['error']['email'] = 'email has been used'; 
} 

echo '<select>'; 

    $cat = $test->get_main_cate($mysqli); 
    while($obj = $cat->fetch_object()){ //line 134 
     echo '<option>'.$obj->name.'</option>'; 
    }    

echo '</select>'; 

? Bu sebepten sunucudaki kütüphane eksik mi? Localhost içinde Sürüm 5.6.19 iken hosting PHP, Sürüm 5.6.18 olduğunu.

cevap

2

sorunun veritabanı boş olduğunu gibi görünüyor bu sorguyu kullanmaya çalışın. Hata açık:

Call to a member function fetch_object() on boolean

Sen Boolean türünde bir değişkeni fonksiyon fetch_object aramaya çalıştım. Satırdaki değişken $cat olarak adlandırılır ve $cat = $test->get_main_cate($mysqli); işlevinin sonucudur.

Bu işlevin içinde tüm kategorileri yükleyip geri döndürüyorsunuz. Hiçbir kategori bulunamazsa, yanlış döndürürsünüz. Sen $cat yerine kontrol etmeyi

$cat = $test->get_main_cate($mysqli); 
if ($cat != false) { 
    while($obj = $cat->fetch_object()){ //line 134 
    echo '<option>'.$obj->name.'</option>'; 
    } 
}  
0

$sql = $mysqli->prepare('SELECT username FROM account WHERE username=?'); 
$sql->bind_param('s', $username); // line 44 
+0

Hayır şans, ben ilk o zaman Ayrıca http://php.net/manual/en kullanılan olabilir bana – kefoseki

+0

olmadığını düşünüyorum Hataları görmek için /mysqli-stmt.error-list.php –

+0

söylemek deneyin alıntı sorunu –

0

gibi sonuçlar üzerinde bir şeyler yineleme denemeden önce senin veri ! ile var olduğunu, empty() kullanmayı deneyin yanlışsa bir onay eklemek zorunda. Kullanımı doğru olarak anlarsam, bu yöntem tüm (veya çoğunu) geçersiz veya boş veri isteklerini denetlemelidir. http://php.net/manual/en/function.empty.php

Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.

The following things are considered to be empty:

"" (an empty string)

0 (0 as an integer)

0.0 (0 as a float)

"0" (0 as a string)

NULL

FALSE

array() (an empty array)

$var; (a variable declared, but without a value)

göre

bu satırı değiştirerek deneyin:

if(!$test->check_duplicate_username($email, $mysqli)) 

bu işe yaramazsa

if(empty($test->check_duplicate_username($email, $mysqli))) 

için. Verileri doğrulamak için 2 adımlı bir kontrol düşünmeniz gerekebilir. Unutmayın, bu yöntemi kodunuzla test etmedim.

kaynağından Uyarı:

No warning is generated if the variable does not exist. That means empty() is essentially the concise equivalent to !isset($var) || $var == false .