2013-01-06 32 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