mySQL 查询不返回任何结果.查询中出错的可能性


mySQL query does not return any results. Possibility of mistake in the query

我的数据库以这种格式存储时间戳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`)

谢谢

尝试使用此查询:

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

尝试更改查询使用这个 :$sh = $db->prepare('从事件中选择 * 其中 $today = 现在(DATE((('(;

我不会通过给你一条鱼来回答你的问题,而是教你如何自己钓鱼。

以下是我如何构建 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().

随意要求澄清并享受自己钓鱼的能力。