2013-05-21 116 views
0

我正在建立一個使用php和html的網站,我用來從數據庫接收數據,又名動態網站,我已經建立了一個CMS供我自己使用。我試圖「簡化」使用php和函數的接收過程。從一個函數運行調用PHP

我的functions.php看起來是這樣的:

function get_db($row){ 
     $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"]; 
     $dsn = $GLOBALS["dsn"]; 
     try { 
      $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]); 
      $stmt = $pdo->prepare("SELECT * FROM lp_sessions"); 
      $stmt->execute(); 
      $row = $stmt->fetchAll(); 
      foreach ($row as $row) { 
       echo $row['session_id'] . ", "; 
      } 
     } 
     catch(PDOException $e) { 
      die("Could not connect to the database\n"); 
     } 
    } 

在那裏,我得到了行內容是這樣的:$row['row']; 我想這樣稱呼它: 下面的代碼段是從索引。 php

echo get_db($row['session_id']); // Line 22 

只是爲了顯示所有行中的內容。 當我運行的代碼片段我得到的錯誤:

Notice: Undefined variable: row in C:\wamp\www\Wordpress ish\index.php on line 22

我還使用PDO只是讓你會知道:)

任何幫助,非常感謝!

問候 了Stian

編輯:更新的functions.php

function get_db(){ 
     $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"]; 
     $dsn = $GLOBALS["dsn"]; 
     try { 
      $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]); 
      $stmt = $pdo->prepare("SELECT * FROM lp_sessions"); 
      $stmt->execute(); 
      $rows = $stmt->fetchAll(); 
      foreach ($rows as $row) { 
       echo $row['session_id'] . ", "; 
      } 
     } 
     catch(PDOException $e) { 
      die("Could not connect to the database\n"); 
     } 
    } 
+0

什麼是第22行?那是'echo get_db ...'行嗎? – Barmar

+0

在'index.php'中顯示設置'$ row'的代碼。 – Barmar

+0

是的,它是:) 10 char –

回答

1

函數應該將它們作爲字符串返回,而不是從數據庫中回顯值。

function get_db(){ 
    $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"]; 
    $dsn = $GLOBALS["dsn"]; 
    $result = ''; 
    try { 
     $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]); 
     $stmt = $pdo->prepare("SELECT * FROM lp_sessions"); 
     $stmt->execute(); 
     $rows = $stmt->fetchAll(); 
     foreach ($rows as $row) { 
      $result .= $row['session_id'] . ", "; 
     } 
    } 
    catch(PDOException $e) { 
     die("Could not connect to the database\n"); 
    } 
    return $result; 
} 

然後稱其爲:

echo get_db(); 

另一種選擇將是返回會話ID爲一個陣列功能:

function get_db(){ 
    $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"]; 
    $dsn = $GLOBALS["dsn"]; 
    $result = array(); 
    try { 
     $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]); 
     $stmt = $pdo->prepare("SELECT * FROM lp_sessions"); 
     $stmt->execute(); 
     $rows = $stmt->fetchAll(); 
     foreach ($rows as $row) { 
      $result[] = $row['session_id']; 
     } 
    } 
    catch(PDOException $e) { 
     die("Could not connect to the database\n"); 
    } 
    return $result; 
} 

那麼你可以使用它作爲:

$sessions = get_db(); // $sessions is an array 

和呼叫者可以t在使用數組中的值時,可能使用它們作爲其他調用中的鍵而不是僅打印它們。

+0

這工作有點:)我沒有得到錯誤!我現在看到,我處理它有點不對(我的壞!!!!)我想要使用它:echo get_db($ row ['session_id']);和$ row ['data']和$ row ['started']都使用相同的函數,這可能嗎? –

1

正如antoox說,但一個完整的變更;更改行排在兩個地方:

 $rows = $stmt->fetchAll(); 
     foreach ($rows as $row) { 
      echo $row['session_id'] . ", "; 
     } 

<?php線把這個在腳本開始將輸出有趣的警告:

error_reporting(E_ALL|E_NOTICE); 

只輸出一行,假設數據庫表中有一場名爲id並且要取得與ID行= 1234:

$stmt = $pdo->prepare("SELECT * FROM lp_sessions WHERE id=?"); 
$stmt->bindValue(1, "1234", PDO::PARAM_STR); 

我選擇了PDO :: PARAM_STR,因爲它會與兩個字符串工作,整數。

+0

仍然是一樣的:注意:未定義的變量:在C:\ wamp \ www \ Wordpress中的行\ isw \ index.php 23行 –