Я пытаюсь построить функцию, которая принимает 2 параметра: имя таблицы и список параметров и построить запрос SELECT
.Метод, который вызывает bind_param несколько раз
Вот пример:
$params['user'] = 'myTestUsername';
$params['pass'] = 'myTestPassword';
echo $dbCon->countBy('users', $params);
Это должно строить (и выполнить) этот запрос:
SELECT * FROM users WHERE user='myTestUsername' AND pass='myTestPassword'
, а затем возвращает количество выбранных строк ...
У меня есть эти 2 метода:
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;
}
2-й метод отлично работает, но у меня есть несколько вопросов на 1-ый. И это связано с использованием метода «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', а не' mysqli'? –
Они * используют * mysqli, но помечены pdo –
Я использую PDO ... –