2013-08-04 97 views
-2

我的數據庫存儲錯誤的可能性時間戳以這種格式2013-08-05 02:37:55領域startmySQL查詢不返回任何結果。在查詢

$today如下圖所示的代碼在2013-08-05

$today = date("Y-m-d"); 

$sh = $db->prepare('SELECT * FROM events WHERE (:today) = DATE(`start`) '); 
$sh->bindValue(":today", $today); 
$sh->execute(); 

的格式保存的變量是不應該數據庫會返回結果?我在這裏錯過了什麼?

此查詢工作正常

SELECT * FROM events WHERE DATE(:today) Between DATE(`start`) and DATE(`end`) 

謝謝

+1

工作的答案,教你如何釣魚,而不是給你一條魚...... – John

+0

你應該更新與你使用的所有相關的代碼位相關的問題。刪除我的答案,並由於問題不完整而被低估。 –

+0

@BurhanKhalid我已更新我的問題與工作查詢 – EnexoOnoma

回答

-1

嘗試與此查詢:

SELECT * FROM events WHERE DATE(`start`) = :today 
+1

OP的WHERE子句的方法沒有錯。 – hjpotter92

+0

@ hjpotter92是對的;等價比較運算符是可交換的。 –

+0

我已更新我的問題與工作查詢 – EnexoOnoma

-1

試圖改變自己的查詢 使用本: $ SH = $ DB-> prepare('SELECT * FROM events WHERE $ today = NOW(DATE())');

+0

不,字符串2013-08-05將插值併成爲算術表達式2013減去8減5,這是整數值2000. –

-1

而不是通過給你一條魚來回答你的問題,我會教你如何爲自己釣魚。

以下是我如何結構SQL ...

function example() 
{ 
if (!failed_condition) {/*error handling*/} 
else 
{ 
    $query1 = '';//Construct queries, NEVER put them in loops. 
    $result1 = mysql_query($query1); 

    if ($result1) 
    { 
    //success 
    $query2 = ''; 
    $result2 = mysql_query($query2); 

    if ($result2) 
    { 
    //success 
    } 
    else {mysql_error_report($query2,mysql_error(),__FUNCTION__);} 
    } 
    else {mysql_error_report($query1,mysql_error(),__FUNCTION__);} 
} 
} 

正如你所看到的唯一一次我縮進被另一個空間,當我遇到一個成功的SQL查詢。否則,我將查詢,錯誤和PHP函數的名稱交給錯誤處理服務。

以下是錯誤處理代碼...

function mysql_error_report($q,$e,$f) 
{ 
if (!isset($database)) {include('database.php');} 

if (isset($_SERVER['HTTP_USER_AGENT'])) {$ua = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);} else {$ua = '';} 

if (isset($database)) 
{ 
    if (isset($_SESSION['member_id'])) {$id = $_SESSION['member_id'];} else {$id = 0;} 
    if (isset($_SESSION)) {$session = mysql_real_escape_string(session_id());} else {$session = 0;} 
    $ip = mysql_real_escape_string(getenv('REMOTE_ADDR')); 
    if (ip_version($ip)=='4') 
    { 
    $ipsql = "INET_ATON('$ip')"; 
    } 
    else 
    { 
    $ip = ip2long6($ip); 
    $ipsql = mysql_real_escape_string($ip); 
    } 

    $query = mysql_real_escape_string($q); 
    $error = mysql_real_escape_string($e); 
    $function = mysql_real_escape_string($f); 
    if (isset($_SESSION['cms_browser'])) {$browser = mysql_real_escape_string($_SESSION['cms_browser'].' '.$_SESSION['cms_browser_version']);} else {$browser = '';} 
    if (isset($_SESSION['type'])) {$type = mysql_real_escape_string($_SESSION['type']);} else if (isset($_SESSION['cms_browser'])) {$type = 'Browser';} else {$type = 'Unknown';} 
    if (isset($_SERVER['REQUEST_URI'])) {$url = $_SERVER['REQUEST_URI'];} else {$url = '';} 

    $query1 = "INSERT INTO errors_sql (id_session, type, id_user, browser, date, ip, function, mysql_error, mysql_query, url, user_agent) VALUES ('$session', '$type', '$id', '$browser', NOW(), $ipsql, '$function', '$error', '$query', '$url', '$ua')"; 
    $result1 = mysql_query($query1); 

    if (!$result1) {mysql_error_report_mail($q,$e,$f,$ua);} 
} 
else {mysql_error_report_mail($q,$e,$f,$ua);} 

現在,你有什麼創建日誌讓你能夠在你需要能夠看到正在發生的事情采取行動。您需要啓用MySQL日誌記錄。由於這是沒有直接關係到這個問題,我會簡單地給你一個鏈接...

http://www.jabcreations.com/blog/enable-mysql-logging

一旦你那麼遠你只​​需要查看實時日誌文件,而無需手動的能力重新加載文件。我一直在使用BareTail,我以前使用TailforWin32。我使用語法突出顯示,藍色爲SELECT,綠色爲UPDATE,藍色爲INSERT,紅色爲DELETE

將實時MySQL日誌打開並在遇到問題時檢入。

我也強烈建議記錄您的所有PHP,JavaScript和HTTP錯誤。如果你真的想全力以赴上踢donkies關閉錯誤報告的PHP最大感光度...

error_reporting(E_ALL); 

...,它會強迫你使用isset()

隨時要求澄清和享受自己釣魚的能力。;-)

+0

我沒有downvote,但我wouldn建議使用數據庫來記錄數據庫錯誤。 –

+0

我已更新我的問題與工作查詢 – EnexoOnoma