PHP PDO bindParam () возвращает TRUE, execute () возвращает FALSE. данные существуют в базе данных - PullRequest
0 голосов
/ 28 октября 2011

Я пытаюсь создать метод в своем классе базы данных для выполнения запросов выбора с 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 База данных не выбрана». Я знаю, что база данных, к которой я пытаюсь подключиться, существует, и я верю, что она передается соединению: что может быть не так?

Спасибо!

...