获取满足条件的所有行,然后为每一行执行一些操作

时间:2013-01-02 14:12:07

标签: php mysql distance resultset geocode

我有一个php网页,它可以找到1公里半径的纬度和经度作为输入提供的所有用户。 lat和long作为数据库的输入,它生成一个包含10个用户的列表作为输出。我想在检索设备ID后向每个生成列表的用户发送一条消息。但我无法这样做。请帮忙

$sql = "SELECT number, userID, 
( 6371 * acos( cos( radians(19.143) ) 
               * cos( radians( latitude ) ) 
               * cos( radians( longitude ) 
                   - radians(72.831) ) 
               + sin( radians(19.143) ) 
               * sin( radians( latitude ) ) 
             )
) AS distance 
FROM users
WHERE device = 'android' 
HAVING distance < 2 
ORDER BY distance;";

$result = mysql_query($sql,$link);

if (mysql_num_rows($result) != 0) 
{
    while($row = mysql_fetch_assoc($result))
    {
                //send notification code
    }
}

当我执行此代码时,我收到错误

  

mysql_fetch_assoc()期望参数1是资源,字符串在..

中给出

请帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:0)

请试试这个

mysql_fetch_array($result,**MYSQL_ASSOC**)

而不是:

mysql_fetch_assoc()

它可以解决您的问题

答案 1 :(得分:0)

首先检查存在或结果

if (!$result) {
    echo mysql_error();
    exit;
}

如果退出则调试您的查询。

答案 2 :(得分:-2)

首先想到:ORDER BY distance;";会出错,请尝试:ORDER BY distance ASC"; 所以我认为你的结果中有字符串错误信息 - 你可以在获取结果之前尝试检查mysql_error()是否为空。

以上假设 - 连接工作和$ link set

第二个想法:按照:http://php.net/manual/en/function.mysql-query.php

**The query string should not end with a semicolon. 

应正确转义查询中的数据。**