我想使用全局变量并使用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 :(得分: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
等)是超级全局,这意味着它们默认为全局变量。并且可以从任何地方访问(虽然这不是最佳实践)。