2012-08-26 102 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? –