2014-02-28 67 views
0

我正在嘗試使用函數從數據庫中獲取特定數據。例如,我想從ID爲1的用戶獲取信息。PHP函數中的MySQL查詢

try { 
    $connection = new PDO("mysql:host=localhost;dbname=database", "root", "password"); 
} 
catch (PDOException $e) { 
    die("Error: " . $e->getMessage()); 
} 

$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

function getUser($id) { 
    global $connection; 
    $query = $connection->prepare("SELECT * FROM accounts WHERE ID = '$id'"); 
    $query->execute(); 

    while($row = $query->fetch()) { 
     echo $row['playername']; 
     $user[] = $row; 
    } 
} 

然後在我的index.php中。

include 'inc/db.php'; 

getUser("1"); 
foreach($user AS $user) { 
    echo $user['ID']; 
} 

第一個回聲工作,我得到的用戶名顯示,但foreach不回顯任何東西。我試圖var_dump($user);,但最終得到NULL

+1

做'foreach($ var as $ var)'沒有多大意義。也就是說,要使用相同的'var'名稱。 – fedorqui

+0

我並不擅長PHP,仍在學習。你會建議我用什麼來從用戶那裏獲取數據? – ibab

+0

您需要了解PHP變量作用域。 'getUser'方法中的'$ user'與您試圖在foreach循環中使用的(undefined)'$ user'完全不同。 –

回答

0

你的問題是你寫的代碼太多。 PHP不能處理這麼多,扼殺和死亡。
所有你真正需要的是

$pdo = new PDO("mysql:host=localhost;dbname=database", "root", "password"); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

function getUser($id) 
{ 
    global $pdo; 

    $query = $pdo->prepare("SELECT * FROM accounts WHERE ID = ?"); 
    $query->execute(array($id)); 
    return $query->fetch(); 
} 

$user = getUser(1); 
echo $user['playername']; 

,使之少更嚴重,你應該使用事先準備好的聲明變量傳遞到查詢和從函數返回的數據。

+1

「php不能處理這麼多,死亡」?咦? HUH !? –

+0

這對於獲得單個物品非常有用。如果我想獲得所有用戶並使用foreach方法呢? – ibab

+0

@ibab只是[瞭解更多](http://stackoverflow.com/tags/pdo/info) –

2

你需要有:

function getUser(...) { 
    ... 
    $user = array(); 
    while(...) { 
     $user[] = $row; 
    } 
    return $user; 
} 

,然後在主代碼:

$users = getUser(1); 
foreach($users as $user) { .... } 

現在你定義局部變量,然後不返回他們,所以他們失去了當該方法退出。然後不捕獲任何可能的返回值,使您的代碼基本上毫無意義。

+0

我試圖用你提供的代碼來回顯價值,但我最終得到了諸如「117744KKhhhhhhhh1111001111112211551122」這樣的值,它們不是數據庫中的值。 – ibab