2012-08-26 141 views
2

foreach循環大於1倍的值這裏是我的功能我怎樣才能恢復使用PHP

function GetUser($id) 
{ 
    global $pdo; 
    $stmt = $pdo->prepare('SELECT lname,fname,mi FROM user WHERE id = :id LIMIT 1'); 
    $stmt->execute(array(':id'=>$id)); 
    foreach($stmt as $name){ 
     $lname = $name['lname']; 
     $lname = $name['fname']; 
     $mi = $name['mi']; 
    } 

    return //what to put here? 
} 

這裏是我的代碼使用的功能

include 'function.php'; 
$names = GetUser($_SESSION['id']); 
//what's next? 

我怎樣才能檢索到的$ L-NAME,$函數中的fname和$ mi?需要任何幫助和建議。謝謝:)

+0

這有什麼錯用多維數組? –

+0

我建議採用面向對象的方法並創建包裝用戶值的用戶對象。或者,您可以只返回數組中的三個值。 – Vulcan

+0

我該怎麼做,先生? –

回答

3

對於初學者不要使用global keyword,但注入你需要的變量。第二你爲什麼不返回數組?:

function getUser($pdo, $id) 
{ 
    $stmt = $pdo->prepare('SELECT lname,fname,mi FROM user WHERE id = :id LIMIT 1'); 
    $stmt->execute(array(':id'=>$id)); 

    $result = array(); 
    foreach($stmt as $name){ 
     $result['lname'] = $name['lname']; 
     $result['fname'] = $name['fname']; 
     $result['mi'] = $name['mi']; 
    } 

    return $result; 
} 

$result = getUser($pdo, 1); 
var_dump($result); 

請注意,這隻會返回最後結果。如果你想要這一切:

function getUser($pdo, $id) 
{ 
    $stmt = $pdo->prepare('SELECT lname,fname,mi FROM user WHERE id = :id LIMIT 1'); 
    $stmt->execute(array(':id'=>$id)); 

    return $stmt->fetchAll(); 
} 

$result = getUser($pdo, 1); 
var_dump($result); 

另外請注意,我已經讓你的函數名稱以一個普通的字母而不是大寫。 「正常」的命名約定是類以一個大寫字母開頭,但函數/方法與正常的名字相同。

如果要檢索基礎上,第一個解決方案的信息,你會怎麼做:

echo $result['lname']; 

如果要檢索基礎上,第二個解決方案的信息,你會怎麼做:

echo $result[0]['lname']; 
+0

是的,我是一個初學者。爲什麼我不應該使用全球?我有很多函數,這就是爲什麼我使用全局,所以我不會一遍又一遍地使用同一行代碼?呵呵:)謝謝 –

+0

不用擔心。每個人都必須從某個地方開始。 :-)查看我答案頂部的鏈接帖子,並查看該答案下的評論/討論。 – PeeHaa

+0

謝謝,順便說一句,我怎麼能檢索到返回先生? –

1
return array(
    "lname" => $lname, 
    "fname" => $fname, 
    "mi" => $mi 
); 
1
function GetUser($id) { 
    global $pdo; 
    $stmt = $pdo->prepare('SELECT lname,fname,mi FROM user WHERE id = :id LIMIT 1'); 
    $stmt->execute(array(':id'=>$id)); 
    return $stmt; 
} 


include 'function.php'; 
$names = GetUser($_SESSION['id']); 
foreach($names as $name){ 
    $lname = $name['lname']; 
    $lname = $name['fname']; 
    $mi = $name['mi']; 
} 

沒有測試,但我認爲它應該工作

1
function GetUser($id) 
{ 
    global $pdo; 
    $stmt = $pdo->prepare('SELECT lname,fname,mi FROM user WHERE id = :id LIMIT 1'); 
    $stmt->execute(array(':id'=>$id)); 
    return count($stmt)==1?$stmt[0]:null; //you may have nothing returned from the database so return null 
} 

然後:

include 'function.php'; 
$names = GetUser($_SESSION['id']); 
if ($names){ //if this is not null then get the properties 
echo $names['fname']; 
echo $names['lname']; 
echo $names['mi']; 
} 
+0

謝謝,但哪種方法或數組更好? :) –

+0

你的SQL已經返回一個數組..爲什麼要創建一個新的? – Samson

3
function GetUser($id) 
{ 
    global $pdo; 
    $stmt = $pdo->prepare('SELECT lname,fname,mi FROM user WHERE id = :id LIMIT 1'); 
    $stmt->execute(array(':id'=>$id)); 
    foreach($stmt as $name){ 
     $lname = $name['lname']; 
     $lname = $name['fname']; 
     $mi = $name['mi']; 
    } 

    return array(
     "$lname" => $lname, 
     "$fname" => $fname, 
     "$mi" => $mi 
    ); 
} 

這是何等的下一個部分:

include 'function.php'; 
$myArray = GetUser($_SESSION['id']); 
$fname = $myArray["$fname"]; 
$lname = $myArray["$lname"]; 
$mi = $myArray["$mi"]; 

或者:

include 'function.php'; 
$myArray = GetUser($_SESSION['id']); 
$fname = $myArray[0]; 
$lname = $myArray[1]; 
$mi = $myArray[2]; 
+0

謝謝:) xxxx –

+0

看到上面的修改版。 @SuiGo –

+0

告訴我怎麼樣,@PeeHaa? –