Я пытаюсь создать метод в своем классе базы данных для выполнения запросов выбора с PDO, в котором я очень новичок.
Я хотел бы передать в качестве параметров запрос выбора и массив значений для привязки.
Запрос проходит через preg_match_all()
и извлекает все параметры.
Затем пары параметр / значение зацикливаются и связываются.
Следует execute()
.
bindParam()
возвращает true
, но execute()
возвращает false
... Я уверен, что в базе данных есть две строки, которые должны быть найдены.
Данные, которые передаются с предыдущей страницы:
Метод такой (я оставил var_dump()
s, которые я использую для отладки, они дают true и false):
public function selectQuery($select_query, $params) {
try {
//prepare query
$stmt = $this - > dbh - > prepare($select_query);
//get the parameters to bind
preg_match_all('/:+(\w)*/', $select_query, $to_bind);
//do the binding
$i = count($params);
while ($i > 0) {
$i--;
$str_to_bind = (string) $to_bind[0][$i];
$str_param = (string) $params[$i];
$str_param = '1';
var_dump($stmt - > bindParam($str_to_bind, $str_param));
}
//execute
var_dump($stmt - > execute());
}
catch (PDOException $e) {
echo 'Select query failed: '.$e - > getMessage();
}
}
Скрипт передает эти значения:
$select_query = "SELECT col1,col3 FROM test_table WHERE col2= :column";
$params[] = '1';
$dbh->selectQuery($select_query, $params);
... Полагаю, мой вопрос: что я делаю не так?
Большое спасибо!
EDIT:
Следуя совету Невса Стоукса, я обнаружил, что при попытке выполнить запрос выдается исключение, которое говорит: «Выбор запроса не выполнен: SQLSTATE [3D000]: Неверное имя каталога: 1046 База данных не выбрана».
Я знаю, что база данных, к которой я пытаюсь подключиться, существует, и я верю, что она передается соединению: что может быть не так?
Спасибо!