Я просто использую базу данных 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();
}
После запуска кода я получаю пару странных вещей.
$stmt->rowCount();
return -1.
В $ds_emp
есть только несколько данных, не так, как ожидалось. Если я запускаю запрос непосредственно в MS Access, запрос возвращает все данные, как я ожидал.
Последняя строка на странице отображает эту ошибку.
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 хранится только несколько данных?
Как я могу исправить это?
Любая помощь будет оценена.