gpt4 book ai didi

php - PHP 数据库连接类中的准备语句

转载 作者:行者123 更新时间:2023-11-29 21:22:18 25 4
gpt4 key购买 nike

我了解准备好的语句如何工作(在函数之外)。但真正让我困惑的是准备好的语句如何在类文件的函数内工作。

例如,如果预准备语句的用法是:

$dbc->select('SELECT * FROM users WHERE firstname = ?');

但是,我不知道我对用户如何使用 $dbc->select(); 感到困惑。类文件中的函数,创建查询,然后使用准备好的语句来执行查询。

是否像让用户编写查询然后将变量作为另一个参数一样简单,例如:

$dbc->select('SELECT * FROM users WHERE firstname = ?', 'Bob');

或者我会将其作为单独的变量供用户填充,然后将其构建到准备好的语句中,例如:

$dbc->select($columns, $table, $variables = array());

或者这会让事情变得过于复杂吗?我还可以有另一个选择特定行的函数。

我觉得选项1是更好的选择,但似乎不太用户友好?或者我只是太累了以至于我想得太多了?

无论如何,我希望这一切都有意义,对于任何错误,我深表歉意 - 我在打字时几乎睡着了!也许是时候到此为止了。

谢谢,基隆

最佳答案

正如我提到的,所有这些都是可行的:

实例一:

class qEngine 
{
private $con,
$bind,
$query;

public function __construct($con)
{
$this->con = $con;
}
public function addParams($array)
{
$i = 0;
foreach($array as $key => $value) {
$bKey = ":{$i}";
$this->bind[$bKey] = $value;
$i++;
}
return $this;
}
public function query($sql)
{
if(!empty($this->bind)) {
$this->query = $this->con->prepare($sql);
$this->query->execute($this->bind);
}
else {
$this->query = $this->con->query($sql);
}
return $this;
}
public function getResults()
{
while($result = $this->query->fetch(PDO::FETCH_ASSOC)) {
$row[] = $result;
}
return (!empty($row))? $row : 0;
}
}

您的示例:

$dbc->select('SELECT * FROM users WHERE firstname = ?');

必须是这样的:

// $con would be a PDO connection
$qEngine = new qEngine($con);
$results = $qEngine ->addParams(array('Bob'))
->query('select * from users where firstname = :0')
->getResults();
print_r($results);

实例二:

class qEngine 
{
private $con,
$bind,
$query;

public function __construct($con)
{
$this->con = $con;
}
private function addParams($array = false)
{
if(empty($array))
return false;

$i = 0;
foreach($array as $key => $value) {
$bKey = ":{$i}";
$this->bind[$bKey] = $value;
$i++;
}
}
public function query($sql,$bind = false)
{
$this->addParams($bind);

if(!empty($this->bind)) {
$this->query = $this->con->prepare($sql);
$this->query->execute($this->bind);
}
else {
$this->query = $this->con->query($sql);
}
return $this;
}
public function getResults()
{
while($result = $this->query->fetch(PDO::FETCH_ASSOC)) {
$row[] = $result;
}
return (!empty($row))? $row : 0;
}
}

您的示例:

$dbc->select("SELECT * FROM users WHERE firstname = ?",'Bob');

必须是这样的:

// $con would be a PDO connection
$qEngine = new qEngine($con);
$results = $qEngine ->query('select * from users where firstname = :0',array('Bob'))
->getResults();

print_r($results);

实例三必须更加复杂,因为您必须自动构建 SQL。我使用的一个类似的工具,但它很复杂。

无论如何,这就是我大致的做法。需要注意的是,我没有广泛使用这些,但只要您在构造中注入(inject)了正确的 pdo 连接,它们就应该可以工作。

关于php - PHP 数据库连接类中的准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com