2013-03-03 74 views
3

這裏是我當前的代碼轉換的mysqli以PDO bind_all

function getUserDetails($username=NULL, $id=NULL) { 
    if($username!=NULL) { 
     $column = "user_name"; 
     $data = $username; 
    } 
    elseif($id!=NULL) { 
     $column = "id"; 
     $data = $id; 
    } 

    global $db; 

    $query = $db->prepare("SELECT id, username, permissions, forename, surname, password, email, courseid, choiceid, lastlogin, active FROM users WHERE $column = :column"); 
    $query->bindParam(":column", $data); 
    $query->execute(); 
    $query->bind_result ($id, $username, $permissions, $forename, $surname, $password, $email, $courseid, $choiceid, $lastlogin, $active); 
    while ($query->fetch()){ 
     $row = array('id' => $id, 'userlevel' => $permissions, 'username' => $username, 'forename' => $forename, 'surname' => $surname, 'password' => $password, 'email' => $email, 'courseId' => $courseid, 'choiceId' => $choiceId, 'lastlogin' => $lastlogin, 'active'=> $active); 
    } 
    return ($row); 
} 

我一直在試圖將它轉換爲PDO,因爲我已經發現了bind_result不與PDO工作 - 任何人都可以幫我一下,我應該做什麼?

我讀過我應該使用抓取的arround?但我很困惑。

[編輯]

IVE嘗試這樣做:

function getUserDetails($username=NULL,$id=NULL) { 
    if($username!=NULL) { 
     $column = "user_name"; 
     $data = $username; 
    } 
    elseif($id!=NULL) { 
     $column = "id"; 
     $data = $id; 
    } 

    global $db; 

    $query = $db->prepare("SELECT id, username, permissions, forename, surname, password, email, courseid, choiceid, lastlogin, active FROM users WHERE $column = :column"); 
    $query->bindParam(":column", $data); 
    $query->execute(); 

    $results = array(); 
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) { 
     $results[] = $row; 
    } 

    return ($results); 
} 

這是正確方向的步驟?

[EDIT2]

更新我的代碼如下:

function getUserDetails($username) { 
    global $db; 

    $query = $db->prepare("SELECT * FROM users WHERE username = :username"); 
    $query->bindParam(":username", $username); 
    return $query->fetch(PDO::FETCH_ASSOC); 
} 

$username = 'uname'; 
$result = getUserDetails($username); 
print_r($result); 

但不打印輸出。用戶名肯定存在。


香港專業教育學院試圖用一些虛擬數據

$data = '2'; 
$sth = $db->prepare("SELECT * FROM test WHERE id = :id"); 
$sth->bindParam(":id", $data); 
$sth->execute(); 
$result = $sth->fetch(PDO::FETCH_ASSOC); 
print_r($result); 

IM試圖找出如何訪問哪些是印刷陣列的測試數據庫: 陣列出來的

Array ([Id] => 2 [Name] => tom) 

我如何(例如)做

$name = $result['name']; //line 67 

當我嘗試代碼我得到

Notice: Undefined index: name in <directory>\test.php on line 67 

想通了!

function getUserDetails($username) { 
    global $db; 

    $sth = $db->prepare("SELECT id, username, permissions, forename, surname, password, email, courseid, choiceid, lastlogin, active FROM users WHERE username = :username"); 
    $sth->bindParam(":username", $username); 
    $sth->execute(); 
    $result = $sth->fetch(PDO::FETCH_ASSOC); 

    return $result; 
} 


$username = 'un'; 
$userdetails = getUserDetails($username); 
echo $userdetails['forename']; 

它給了我正確的答案! 感謝您的幫助

+0

1. **您需要使用連接選項來形成我鏈接到**的標記wiki以獲取錯誤。你需要讓你介意字段名稱。如果它是'user_name','username','Name'或'name' – 2013-03-04 15:03:34

回答

3

YES!
這是朝着正確方向邁出的重要一步。
正如您所看到的,mysqli絕對不可用,並且已準備好的語句,都在綁定佔位符之間返回結果。
雖然PDO可以使用少得多的代碼來解決您的問題。
你不需要與PDO沒用綁定在所有 - 只是得到所有結果與使用fetchall():

function getUserDetails($username=NULL,$id=NULL) { 
    if ($username) { 
     $column = "user_name"; 
     $data = $username; 
    } elseif($id) { 
     $column = "id"; 
     $data = $id; 
    } else { 
     return; 
    } 
    global $db; 

    $query = $db->prepare("SELECT * FROM users WHERE $column = ?"); 
    $query->execute(array($data)); 
    return $query->fetchAll(); 
} 

別急。爲什麼你想返回一個數組,如果它是用戶的詳細信息? 它只會將無用的維添加到返回的數組中。 對於這種非常情況下作出它

return $query->fetch(); 

,而不是使用fetchall()。
但是,你需要很多行 - 使用後一種方法。
關於其他方法和有用的連接選項,請參閱tag wiki

+0

那麼我會如何調用結果?我試圖通過「$ userdetails = getUserDetails($ username); $ echo $ userdetails ['forename'];」 – user1842842 2013-03-04 13:35:35

+0

我將我的代碼更新爲: function getUserDetails($ username){ global $ db; $ query = $ db-> prepare(「SELECT * FROM users WHERE username =:username」); \t $ query-> bindParam(「:username」,$ username); return $ query-> fetch(PDO :: FETCH_ASSOC); } $ username ='uname'; $ result = getUserDetails($ username); print_r($ result); 但是當我嘗試打印結果其空[編輯]將代碼添加到我原來的問題,更容易閱讀 – user1842842 2013-03-04 14:47:07

+0

感謝您的幫助!我想到了! :d – user1842842 2013-03-04 15:03:15