Tarih aralıklarını kapsayan bir MySQL / PHP sorgu ile yardıma ihtiyacı

2 Cevap php

Esasen onlar GET geçti müşterinin bir müşteri var dbase tablodan bazı hesap bilgilerini almak gerekir, ve hesap yerleştirme tarihi (dateplaced) GET üzerinden tekrar takvim alanlardan geçti başlangıç ​​ve bitiş tarihleri ​​arasındadır.

Aşağıdaki sorgu hiçbir satır döndürür. Bu tarih konuları bırakır böylece, ben sorgu işin SELECT ve DAN bölümleri amaçlandığı gibi doğruladıktan ve GET çalışıyor gelen istemci seçin. "Dateplaced" "gg / aa / yyyy" biçiminde bir varchar veritabanında saklanır. Araştırma üzerine ben mysql "yyyy-aa-gg" biçiminde tarihleri ​​istediğini gördük. Ben GET veri karşılaştırma arasındaki iki parça bir araya getirilerek, ve doğru biçimlendirilmiş oldukça eminim var. Ben yerine str_to_date yorum "dateplaced" () ve işe yaramadı kullanarak sadece açıkça çalıştı, bu yüzden aşağıda gösterildiği gibi) (str_to_date çalıştı, ama hala çalışmıyor.

Burada kimse benim sorunumu nokta olabilir? Bu beni deli ediyor.

$query = mysql_query("SELECT accountnumber, firstname, middlename, lastname, currentbalance FROM dbase WHERE clientname = '" . $_GET['client'] . "' AND str_to_date(dateplaced, '%Y-%m-%d') BETWEEN '" . $_GET['calendar_start_year'] . "-" . $_GET['calendar_start_month'] . "-" . $_GET['calendar_start_day'] . "' AND '" . $_GET['calendar_end_year'] . "-" . $_GET['calendar_end_month'] . "-" . $_GET['calendar_end_day'] . "' ORDER BY lastname") or die(mysql_error());

2 Cevap

str_to_date() takes the format of the existing string, not the desired string. So you need str_to_date(dateplaced, '%d/%m/%Y') to get Y-m-d.

Sorgu dışında tarih yaratma yapın. Bu hata ayıklama daha kolay.

$clean_name=mysqli_real_escape_string($_GET['client']);
$start_date=date_create("{$_GET['calendar_start_year']}-{$_GET['calendar_start_month']}-{$_GET['calendar_start_day']}")->format('Y-m-d');
$end_date=date_create("{$_GET['calendar_end_year']}-{$_GET['calendar_end_month']}-{$_GET['calendar_end_day']}")->format('Y-m-d');

$q="SELECT accountnumber, firstname, middlename, lastname, currentbalance 
FROM dbase 
WHERE clientname = '{$clean_name}' 
  AND str_to_date(dateplaced, '%d/%m/%Y') BETWEEN '$start_date' AND '$end_date' 
ORDER BY lastname;

PS, tüm değişkenleri temizleyin. Tırnak işaretleri ya kaçtı (veya kötü korsan girişimleri) gereken diğer karakterler olabilir. mysqli_real_escape_string() kullanmanız gereken budur.