-2

2013-08-05 02:37:55我的数据库以这种格式在字段中存储时间戳start

$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`)

谢谢

4

3 回答 3

-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 错误。如果您真的想全力以赴踢驴,请将 PHP 的错误报告灵敏度调到最大...

error_reporting(E_ALL);

...它会迫使你使用isset().

随时要求澄清并享受自己钓鱼的能力。;-)

于 2013-08-05T00:03:55.660 回答
-1

试试这个查询:

SELECT * FROM events WHERE DATE(`start`) = :today
于 2013-08-04T23:55:20.963 回答
-1

尝试使用以下命令更改您的查询: $sh = $db->prepare('SELECT * FROM events WHERE $today = NOW(DATE())');

于 2013-08-05T00:00:41.050 回答