Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多次调用bind_param的方法_Php_Mysql_Pdo_Sqlbindparameter - Fatal编程技术网

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();
}