Ошибка SQLSTATE [22018] в операторе подготовки PDO - PullRequest
0 голосов
/ 17 апреля 2020

Я просто использую базу данных MS Access. Я пытаюсь показать данные сотрудника за последний год из базы данных MS Access, используя оператор подготовки PDO в PHP.

Это код:

index. php

<?php

    require_once "config.php";
    date_default_timezone_set("Asia/Jakarta");

    echo "<h3>Employee Data</h3><br><br>";

    // START PDO SELECT
    try {
        $sql = "SELECT USERINFO.Name, USERINFO.Gender, CHECKINOUT.*, IIf(CHECKINOUT.Update = '', '[[ empty ]]', CHECKINOUT.Update) AS update_costum FROM CHECKINOUT 
                LEFT JOIN USERINFO  ON CHECKINOUT.USERID = USERINFO.USERID
                WHERE CHECKINOUT.CHECKTIME BETWEEN ? AND ?";

        $dateFrom1 = "(Date()-360)";
        $dateTo1 = "Date()";
        //$dateFrom2 = date("d/m/Y H:i:s");
        //$dateTo2 =  date("d/m/Y H:i:s", strtotime("-1 years"));

        $stmt = $link->prepare($sql);
        $stmt->bindParam(1, $dateFrom1 );
        $stmt->bindParam(2, $dateTo1 );
        $stmt->execute(); // return -1 ?
        echo $stmt->rowCount() . "<br><br>";
        while ($ds_emp = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo "User ID: " . $ds_emp["USERID"] . " || ";
            echo "Nama : " . $ds_emp["Name"] . " " . $ds_emp["Gender"] . " || ";
            echo "CHECKTIME : " . $ds_emp["CHECKTIME"] . " || ";
            echo "Update : " . $ds_emp["update_costum"];
            echo "<br>";
        }
    } catch (PDOException $e) {
        echo $e->getMessage();
    }

После запуска кода я получаю пару странных вещей.

  1. $stmt->rowCount(); return -1.

  2. В $ds_emp есть только несколько данных, не так, как ожидалось. Если я запускаю запрос непосредственно в MS Access, запрос возвращает все данные, как я ожидал.

  3. Последняя строка на странице отображает эту ошибку.

SQLSTATE[22018]: Invalid character value for cast specification: -3030 [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression. (SQLFetchScroll[-3030] at ext\pdo_odbc\odbc_stmt.c:543)

Я поставил неправильные параметры или запрос? Я думаю, что мой синтаксис запроса не является неправильным.

Почему $stmt->rowCount(); возвращает -1?

Почему в переменной $ ds_data хранится только несколько данных?

Как я могу исправить это?

Любая помощь будет оценена.

...