PHP PDO bindParam () повертає TRUE, execute () повертає FALSE. Дані існують у базі даних

Я намагаюся побудувати метод у своєму класі баз даних для виконання вибраних запитів з PDO, що я дуже новий. Я хотів би передавати як параметри вибірний запит і масив, щоб значення для прив'язки. Запит проходить через preg_match_all() і вилучає всі параметри. Пари параметра/значення потім петлі і пов'язані. Дотримується execute() .

bindParam() returns true, but execute() returns false... I'm sure that there are two rows in the database that should be found.

Дані, які передаються з попередньої сторінки:

Метод (я залишив var_dump() , які я використовую для налагодження, вони дають істину та помилкові):

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 Не вибрано жодної бази". Я знаю, що база даних, яку я намагаюся встановити для підключення, існує, і я вважаю, що вона передається на з'єднання: що може стати не так?

Дякую!

0
Чи використовував ви setAttribute , щоб налаштувати рукописну базу даних, щоб фактично викидати винятки, які ви намагаєтеся спіймати?
додано Автор Nev Stokes, джерело
Якщо виконати повертає false, перевірте помилку $ this-> dbh-> з причин того, чому вона не виконана (припускаючи, що ви перебуваєте в mysqli в режимі OOP).
додано Автор Marc B, джерело
можливий дублікат Напишіть запити PHP PDO як dbName . tableName на відміну від tableName - чому?
додано Автор outis, джерело
Дякую Нев Стокс, я використовував setAttribute (тому я дійсно бачу винятки!). Сценарій тепер повторює: "Вибрати запит не вдалося: SQLSTATE [3D000]: Невірне ім'я каталогу: 1046 Не вибрано жодної бази даних" ... Однак з'єднання здається добре, і я впевнений, що база існує! Ще дуже заплутано ...
додано Автор David, джерело

Відповідей немає

0
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php