0

我想使用全局变量并使用 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'] : '';

我想要做的甚至是可能的,还是我最好找到另一种分配值的方法,以便我可以插入数据库?

4

1 回答 1

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等)是超全局变量,这意味着它们默认是全局的。并且可以从任何地方访问(尽管这并不是最佳实践)。

于 2013-01-06T19:43:05.107 回答