1

以下の PDO ステートメントがあります。ステートメントに一致する行があるかどうかを調べ、true の場合は 1 を返し、「一致がありました」とエコーします。何らかの理由で、データベースの 24 行目に明らかに一致するものがあるにもかかわらず、false が返され続けます。誰かがエラーを見つけてくれることを願っています。

PDO ステートメント:

<?php

$employeeID = 1;
$dateToday = "01/12/13";

try{
    $conn = new PDO('mysql:host=localhost;dbname=timecard', 'username', 'password');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT COUNT(*) FROM timeRecords WHERE `timeOut`= 'NULL' AND `employeeID`= :employeeID AND `date`= :dateToday");

    $stmt->execute(array(':employeeID' => $employeeID, ':dateToday' => $dateToday));
    } catch(PDOException $e){
        echo'ERROR: ' . $e->getMessage();
    }

if($stmt->fetchColumn() > 0){
    echo "There was a match!";
} else {
    echo "There was no Match";
}

?>

データベース:

+----+------------+----------+------------------+---------------------+-----------+------------+-----------+------------------+
| id | employeeID | date     | timeIn           | jobDescription      | equipType | unitNumber | unitHours | timeOut          |
+----+------------+----------+------------------+---------------------+-----------+------------+-----------+------------------+
|  1 |       NULL | NULL     | 01/06/13 7:16 pm |                     |           | NULL       |      NULL | 01/06/13 8:57 pm |
|  2 |       NULL | NULL     |                  |                     |           | NULL       |      NULL | 01/06/13 7:17 pm |
|  3 |       NULL | NULL     | 01/06/13 8:43 pm |                     |           | NULL       |      NULL | NULL             |
|  4 |       NULL | NULL     | 2:12 am          |                     |           | NULL       |      NULL | 12:47 pm         |
|  5 |       NULL | NULL     | 8:33 pm          |                     |           | NULL       |      NULL | NULL             |
| 17 |       NULL | NULL     | 2:32 pm          |                     |           | NULL       |      NULL | NULL             |
| 18 |       NULL | 01/12/13 | 2:33 pm          |                     |           | NULL       |      NULL | 5:07 pm          |
| 19 |       NULL | 01/12/13 | 2:37 pm          |                     |           | NULL       |      NULL | 5:07 pm          |
| 20 |       NULL | 01/12/13 | 5:07 pm          |                     |           | NULL       |      NULL | 5:07 pm          |
| 21 |          1 | 01/12/13 | 5:31 pm          | Worked in Jefferson | Excavator | 01E        |      8182 | 5:37 pm          |
| 22 |       NULL | NULL     |                  | Worked in Jefferson | Excavator | 01E        |      8932 | NULL             |
| 23 |       NULL | 01/12/13 | 7:10 pm          |                     |           | NULL       |      NULL | NULL             |
| 24 |          1 | 01/12/13 | 7:11 pm          |                     |           | NULL       |      NULL | NULL             |
+----+------------+----------+------------------+---------------------+-----------+------------+-----------+------------------+
4

1 に答える 1

3

NULL ではなく文字列 'NULL' を探しているため、= 'null' を変更することをお勧めします。

$stmt = $conn->prepare("SELECT COUNT(*) FROM timeRecords WHERE `timeOut` IS NULL AND `employeeID`= :employeeID AND `date`= :dateToday");

また、次のことを試してみてください。

if($stmt->rowCount()){
    echo "There was a match!";
}else{
    echo "There was no Match";
}
于 2013-01-13T02:26:41.803 に答える