2013-04-17 172 views
0

我有代碼下面。當我使用此代碼而沒有WHERE子句時,將按預期顯示錶中的所有用戶。但是,當使用WHERE子句時,不顯示任何內容。mysqli不執行Select語句

可能是什麼原因,我該如何解決?

謝謝!

function requestUser($user) { 
    $DBHost = "localhost"; 
    $DBUser = "dbUser"; 
    $DBPass = "dbPass"; 
    $DBName = "dbName"; 

    $db = new mysqli($DBHost, $DBUser, $DBPass, $DBName); 
    if ($db -> connect_errno > 0) { 
    $lbOK = false; 
    } 
    else { 
    $lbOK = $db -> set_charset('utf8'); 
    } 

    if ($lbOK) { 
    $id   = NULL; 
    $user_name = NULL; 
    $user  = htmlentities($user, ENT_QUOTES); 
    $lcSQL  = "SELECT `user_name` FROM `users` WHERE user_name=?"; 
    $stmt  = $db -> prepare($lcSQL); 
    $ok   = $stmt -> bind_param('s', $user); 
    $ok   = $stmt -> execute(); 
    $ok   = $stmt -> bind_result($user_name); 

    while ($row = $stmt -> fetch()){ 
     echo $user_name; 
    } 

    $stmt->close(); 
    } 
} 
+0

可能沒有人與where子句匹配! – rahularyansharma

+0

您確定您擁有user_name'?'的用戶嗎? – Daanvn

+0

是的,有些用戶符合條件。 –

回答

0

您的代碼有很多重大缺陷,其中一些可能是導致問題的原因,有些則不是。但儘管如此,他們都必須被糾正

  1. 決不連接共同數據庫的應用程序函數中。一次連接引導文件中的某個地方,並在整個應用程序中使用該單一連接。
  2. 不要在任何數據庫交互中使用htmlentities。它可能很容易破壞數據
  3. 總是檢查錯誤
  4. 不要使用mysqli,它是不可用的。改用PDO。

    $dsn = "mysql:host=DBHost;dbname=DBName;charset=utf8"; 
    $opt = array(
        PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
    ); 
    $pdo = new PDO($dsn,$DBUser, $DBPass, $opt); 
    
    function requestUser($user) { 
        global $db; 
    
        $sql = "SELECT `user_name` FROM `users` WHERE user_name=?"; 
        $stmt = $db->prepare($sql); 
        $stmt->execute(array($user)); 
        return $stmt->fetchColumn(); 
    } 
    echo requestUser($user); 
    

,如果它仍然無法正常工作,驗證它這樣

$sql = "SELECT `user_name` FROM `users` WHERE user_name='$user'"; 
    var_dump($sql); 

,然後嘗試在控制檯運行/ phpMyAdmin來找出什麼地方錯了你的數據/值

+0

謝謝你的提示。我發佈的功能僅用於測試。在我的應用程序中,數據庫連接在引導程序中建立。您給我的代碼使用PDO方法,我無法使用PDO,因爲它在服務器上不可用...並且無法更改該... –

+0

DB中有與WHERE子句匹配的用戶。 –

+0

我剛剛在MySQL 5+服務器上測試了我的代碼,它正在工作。在服務器上,我必須使這個工作有MySQL 4.1.22(在php手冊中所述的4.1以上)。這可能是一個原因嗎? –