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

时间:2013-08-04 23:48:01

标签: php mysql

我的数据库在字段2013-08-05 02:37:55

中以此格式start存储时间戳

$today如下面的代码所示,以[{1}}

的格式保存变量
2013-08-05

不应该认为数据库会返回结果吗?我在这里缺少什么?

此查询正常运行

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

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

谢谢

3 个答案:

答案 0 :(得分:-1)

尝试使用此查询:

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

答案 1 :(得分:-1)

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

答案 2 :(得分:-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()

随意请求澄清并享受为自己捕鱼的能力。 ; - )