gpt4 book ai didi

php - 多次调用 bind_param 的方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:00 24 4
gpt4 key购买 nike

我正在尝试构建一个带有 2 个参数的函数:一个表名和一个参数列表并构建一个 SELECT询问。

这是一个例子:

$params['user'] = 'myTestUsername';
$params['pass'] = 'myTestPassword';
echo $dbCon->countBy('users', $params);

这应该构建(并执行)这个查询:
SELECT * FROM users WHERE user='myTestUsername' AND pass='myTestPassword'

然后返回所选行数...

我有这两种方法:

1)主要方法(SQL魔术应该发生的地方):
public function countBy($table, $params) {
$query = $this->buildQuery($table, $params);

$mySelect = $this->dbh->prepare($query);
$params = array_merge(array(count($params)), array_values($params));
call_user_func_array(array(&$mySelect, 'bind_param'), $params);

if ($mySelect) {
$mySelect->execute();
return $mySelect->rowCount();
}
return 0;
}

2) 使用给定参数构建查询的方法:
public function buildQuery($table, $params) {
$i = 0;
$where = '';

if (count($params) > 0) {
$query = 'SELECT * FROM ' . $table . ' WHERE ';
foreach(array_keys($params) as $pList) {
$i++;
$where .= $pList . '=?' . ($i<count($params) ? ' AND ' : '') ;
}
$query .= $where;

// output is like : SELECT * FROM users WHERE user=? AND pass=?

return $query;
}
return null;
}

第二种方法效果很好,但第一种方法有一些问题。和使用“ call_user_func_array ”方法有关。

我真的不明白我做错了什么......有什么想法吗?

call_user_func_array 的“解决方案”取自 here ,但我不确定这部分:
$params = array_merge(array(str_repeat('s', count($params))), array_values($params));

在我的代码中,我尝试像这样使用它:
$params = array_merge(array(count($params)), array_values($params));

但还是什么都没有……

最佳答案

使用 PDO,绑定(bind)的工作方式有点不同:

$mySelect = $this->dbh->prepare($query);
if ($mySelect) {
$mySelect->execute(array_values($params));
return $mySelect->rowCount();
}

关于php - 多次调用 bind_param 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17131451/

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