Php 多次调用bind_param的方法
我试图构建一个包含两个参数的函数:表名和参数列表,并构建一个Php 多次调用bind_param的方法,php,mysql,pdo,sqlbindparameter,Php,Mysql,Pdo,Sqlbindparameter,我试图构建一个包含两个参数的函数:表名和参数列表,并构建一个SELECT查询 下面是一个例子: $params['user'] = 'myTestUsername'; $params['pass'] = 'myTestPassword'; echo $dbCon->countBy('users', $params); 这将生成(并执行)此查询: SELECT * FROM users WHERE user='myTestUsername' AND pass='myTestPassword
SELECT
查询
下面是一个例子:
$params['user'] = 'myTestUsername';
$params['pass'] = 'myTestPassword';
echo $dbCon->countBy('users', $params);
这将生成(并执行)此查询:
SELECT * FROM users WHERE user='myTestUsername' AND pass='myTestPassword'
然后返回所选行数
我有以下两种方法:
1) 主要方法(SQL神奇之处):
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;
}
在我的代码中,我尝试这样使用它:
$params = array_merge(array(count($params)), array_values($params));
但是仍然没有什么…对于PDO,绑定的工作原理有点不同:
$mySelect = $this->dbh->prepare($query);
if ($mySelect) {
$mySelect->execute(array_values($params));
return $mySelect->rowCount();
}
使用PDO时,绑定的工作方式有点不同:
$mySelect = $this->dbh->prepare($query);
if ($mySelect) {
$mySelect->execute(array_values($params));
return $mySelect->rowCount();
}
是
mysqli
对象的方法,对于PDO它被调用,并且它不同时接受多个参数。您必须遍历$params
并分别添加它们 是mysqli
对象的方法,对于PDO,它被调用,并且不同时接受多个参数。您必须遍历$params
并分别添加它们 可以肯定的是,您使用的是PDO
,而不是mysqli
?他们使用的是mysqli,但标记为pdo@cristic84,您得到了一些错误?嘿,call_user_func_数组的第一个参数应该是可调用的(callback),不是数组类型。@felipsmartins对象和方法的数组是可调用的
,这只是为了确定-您使用的是PDO
,而不是mysqli
?他们使用的是mysqli,但标记为pdo@cristic84,您得到了一些错误?嘿,call_user_func_数组的第一个参数应该是可调用的(callback),不是数组类型。@felipsmartins对象和方法的数组是可调用的。。而您可以在执行时使用参数<代码>$mySelect->execute($params)我试过这么做,但没用。。。这就是为什么我在网上搜索了一下,发现使用[code]call\u user\u func\u array[/code]可能是一个解决方案……是的。。。太棒了!谢谢你们!这就是问题所在。。。我当时很匆忙,没有注意到mysqli和PDO的问题……我不明白为什么要使用bindParam。而您可以在执行时使用参数<代码>$mySelect->execute($params)我试过这么做,但没用。。。这就是为什么我在网上搜索了一下,发现使用[code]call\u user\u func\u array[/code]可能是一个解决方案……是的。。。太棒了!谢谢你们!这就是问题所在。。。我当时很匆忙,没有注意到mysqli vs PDO的问题…我尝试了这个,我验证了发送的值,但我不知道为什么不执行查询。。。下面是我所做的:foreach($params as$param){$selectQuery->bindParam($I++,$param);var_dump($query.| | | |..$I.。$param);//为了检查}我尝试了这个,我验证了发送的值,但我不知道为什么不执行查询。。。下面是我所做的:foreach($params as$param){$selectQuery->bindParam($I++,$param);var_dump($query.| | |'。$I.| |'。$param);//检查}
$mySelect = $this->dbh->prepare($query);
if ($mySelect) {
$mySelect->execute(array_values($params));
return $mySelect->rowCount();
}