1

以下のコードを使用すると、指定された日付が MySQL の「日付」列に存在するかどうかを確認できません。

$data = array(1367971200);

$s=$dbh->prepare("
    SELECT DISTINCT
        `date`
    FROM
        `report_coa_bal_hist`
    WHERE
        UNIX_TIMESTAMP(`date`) = ?
");

if ($s->execute($data)) {

    if ($s['date'] == null) {

        return false;
    }

    return true;

}

phpMyAdmin に「2013-05-08」という日付が表示されているにもかかわらず、false が返されます。

テーブル自体には、その日付の 70 以上のエントリが含まれています。含まれている場合は常にそうしますが、この段階で存在するかどうかを知りたいだけです。

日付フィールドは MySQL の「日付」タイプです。クエリの PDO 呼び出しの構造化にバグがあると思われます。

アップデート

$r['date']`$s['date'] に更新されました。その構造にはまだ問題があると思いますが、おそらくクエリを修正して、これに焦点を当てる前に結果が得られるようにする必要があります。

また、データベースに対して直接クエリを実行しようとしたところ、ターゲットの日付が存在することを確認できたにもかかわらず、空の結果セットが得られました。まだ当惑!

4

3 に答える 3

2

これを試して

$data = array(1367971200);

$s=$dbh->prepare("
SELECT COUNT(`date`) as c_date
FROM
    `report_coa_bal_hist`
WHERE
    UNIX_TIMESTAMP(`date`) = ?");

if ($s->execute($data)) {
    $result = $s->fetch(PDO::FETCH_ASSOC);
    if ($result['c_date'] > 0) {
        return false;
    }
    return true;
}
于 2013-05-08T07:10:00.130 に答える
0

UNIX タイムスタンプはより正確な性質 (つまり秒) であるため、丸一日を選択することはできません。テキスト バージョンが必要になります。

$data = array(date('Y-m-d', 1367971200));

$stmt = $dbh->prepare("SELECT COUNT(*)
    FROM `report_coa_bal_hist`
    WHERE `date` = ?
");

$stmt->execute($data);
$count = current($stmt->fetchAll(PDO::FETCH_COLUMN, 0));
return $count > 0;

スクリプトを実行するサーバーとデータベース サーバー自体のタイムゾーンの違いに注意してください。

于 2013-05-08T07:19:37.297 に答える
-2

コードには多くの欠陥がありますが、1 つではありません。

  • チェックしている値の形式
  • SQLでチェックする方法
  • あなたが結果を得ている方法

したがって、コードは

$data = array('2013-05-07');
$sql  = "SELECT 1 FROM report_coa_bal_hist WHERE `date` = ? LIMIT 1";
$stm  = $dbh->prepare($sql);
$stm->execute($data);
return $stm->fetchColumn();
于 2013-05-08T07:38:05.313 に答える