2013-01-06 29 views
0

我想使用全局變量並使用bindValue()將其分配給佔位符,以便將值插入到數據庫中。我使用的功能如下如何在類函數bindvalue中使用全局變量?

public function insertComment() { 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $sql = 'INSERT INTO comments (name, email, commentText, articleID) VALUES (:name, :email, :commentText, :articleID)'; 
    $st = $conn->prepare ($sql); 
    $st->bindValue(":name", $this->name, PDO::PARAM_STR); 
    $st->bindValue(":email", $this->email, PDO::PARAM_STR); 
    $st->bindValue(":commentText", $this->commentText, PDO::PARAM_STR); 
    $st->bindValue(":articleID", $this->articleID, PDO::PARAM_INT); 
    $st->execute(); 
    $conn = null; 
} 

的原因,我不能只是做一個公共變量是因爲數據正在從形式到它發佈和使用公共或公共靜態是無效的語法。我使用的變量是

$name = isset($_POST['name']) ? $_POST['name'] : ''; 
$email = isset($_POST['email']) ? $_POST['email'] : ''; 
$commentText = isset($_POST['comment']) ? $_POST['comment'] : ''; 
$id = isset($_POST['id']) ? $_POST['id'] : ''; 

就是我想要做的甚至有可能還是我最好找到另一種方式來分配值,所以我可以插入到數據庫?

+0

什麼什麼什麼是什麼? 「使用公共是無效的語法」?小心告訴我誰告訴你的? –

+0

using public $ name = isset($ _ POST ['name'])? $ _POST ['name']:'';'不是一個有效的語法就是我的意思 – user1711576

+1

聽說過__construct()'? –

回答

2

我會開始刪除創建的數據庫實例以外的函數,因爲從它的外觀你打開和關閉大量的數據庫連接。

class Foo 
{ 
    private $conn; 

    public function __construct(PDO $conn) 
    { 
     $this->conn = $conn; 
    } 

    public function insertComment($name, $email, $comment, $articlId) { 
     $sql = 'INSERT INTO comments (name, email, commentText, articleID) VALUES (:name, :email, :commentText, :articleID)'; 
     $st = $this->conn->prepare ($sql); 
     $st->bindValue(":name", $name, PDO::PARAM_STR); 
     $st->bindValue(":email", $email, PDO::PARAM_STR); 
     $st->bindValue(":commentText", $commentText, PDO::PARAM_STR); 
     $st->bindValue(":articleID", $articleID, PDO::PARAM_INT); 
     $st->execute(); 
    } 
} 

$conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
$foo = new Foo($conn); 
$foo->insertComment($_POST['name'], $_POST['email'], $_POST['commentText'], $_POST['articleId']); 

或者甚至可能有更好的請求對象並使用它來注入方法。

不確定你的意思是global變量,因爲請求變量($_GET,$_POST等)是超全局變量,意味着它們默認爲全局變量。並且可以從任何地方訪問(儘管這不是最佳實踐)。

+0

有沒有一種方法可以在不創建另一個'__construct'的情況下工作,因爲我已經將它用作一個數組並且拋出了這個錯誤'不能使用PDO類型的對象作爲數組' – user1711576

+0

不,一個類只能有一個構造函數。你應該做的是添加另一個參數,如:'public function __construct($ yourArray,$ conn)' – PeeHaa

+0

如何在構造中指定參數? – user1711576