【问题标题】:Android php mysql query安卓 php mysql 查询
【发布时间】:2012-01-07 02:54:53
【问题描述】:

我从 java 得到一个字符串:“2011-11-25 08:16:50” post_date 列是 TIMESTAMP 但是下面的查询没有给出任何结果。错误是什么?

$date2 = $_POST['Date'];

$result= mysql_query("Select * FROM (Select * FROM user WHERE latitude > $minLat AND latitude < $maxLat AND longitude > $minLon AND longitude < $maxLon AND post_date > $date2 ORDER BY post_date DESC LIMIT $amount1) a ORDER BY post_id");

while($results = mysql_fetch_assoc($result)) 
    $output[]=$results;

print(json_encode($output));
mysql_close();

【问题讨论】:

  • 你能澄清一下是根本没有输出,还是一个空的 JSON 数组?无论哪种方式,您都没有进行任何错误检查。您需要mysql_query() 通话后执行此操作。否则,如果查询失败,您的脚本将中断。 manual on mysql_query() 或此reference question. 中概述了如何执行此操作
  • 另外,您显示的代码容易受到SQL injection 的攻击。使用正确的库清理方法(如经典 mysql 库的 mysql_real_escape_string()),或切换到 PDO 和准备好的语句。
  • 请将查询编辑为 $result= mysql_query("Select * FROM (Select * FROM user WHERE latitude > $minLat AND latitude $minLon AND longitude $date2 ORDER BY post_date DESC LIMIT $amount1) 一个 ORDER BY post_id") 或 die(mysql_error());并给我们错误,我认为这是 mysql 的语法错误

标签: java php android mysql


【解决方案1】:

您必须在 MySQL 中使用单引号日期。另外,由于是直接从$_POST获取的,建议先用mysql_real_escape_string()转义。

$result= mysql_query("
  Select * FROM (
    Select * FROM user 
    WHERE
      latitude > $minLat 
      AND latitude < $maxLat 
      AND longitude > $minLon 
      AND longitude < $maxLon 

      -- Surround $date2 with quotes
      AND post_date > '$date2'
    ORDER BY post_date DESC LIMIT $amount1) a
  ORDER BY post_id");

【讨论】:

  • duh...谢谢很多人这是报价...无论如何..是的,我知道 sql 注入再次感谢。
猜你喜欢
  • 2015-09-06
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
相关资源
最近更新 更多