Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Haversine公式中的MySQL语法错误_Php_Mysql_Google Maps Api 3_Mysql Error 1064 - Fatal编程技术网

Php Haversine公式中的MySQL语法错误

Php Haversine公式中的MySQL语法错误,php,mysql,google-maps-api-3,mysql-error-1064,Php,Mysql,Google Maps Api 3,Mysql Error 1064,下面的代码中出现了令人沮丧的MySql语法错误。实际误差为: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第9行“JOIN storetable ON pricelist.storecode=storetable.storecode JOIN itemlist ON”附近要使用的正确语法 附加信息:此代码基于Google Maps Php/MySql示例: 在我尝试添加JOIN语句之前,我能够使这段代码正常工作 $

下面的代码中出现了令人沮丧的MySql语法错误。实际误差为:

SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第9行“JOIN storetable ON pricelist.storecode=storetable.storecode JOIN itemlist ON”附近要使用的正确语法

附加信息:此代码基于Google Maps Php/MySql示例:

在我尝试添加JOIN语句之前,我能够使这段代码正常工作

$query = sprintf("SELECT storetable.storeaddress, 
                         storetable.storename, 
                         storetable.lat, 
                         storetable.lng,
                         ( 3959 * acos( cos( radians('%s') ) * 
                         cos( radians( storetable.lat ) ) *                              cos(radians(storetable.lng)  - radians('%s') ) + 
                         sin( radians('%s') ) * sin( radians( storetable.lat ) ) ) ) AS distance 
                    FROM pricelist 
                  HAVING distance < 25 
                ORDER BY distance 
                   LIMIT 0 , 20,
                    JOIN storetable ON pricelist.storecode = storetable.storecode
                    JOIN itemlist ON pricelist.upccode = itemlist.upccode",
                 mysql_real_escape_string($latitude),
                 mysql_real_escape_string($longitude),
                 mysql_real_escape_string($latitude));
$query=sprintf(“选择storetable.storeaddress,
storetable.storename,
storetable.lat,
storetable.lng,
(3959*acos(弧度('%s'))*
cos(弧度(storetable.lat))*cos(弧度(storetable.lng)-弧度('%s'))+
sin(弧度('%s'))*sin(弧度(storetable.lat)))作为距离
从价目表
距离小于25的
按距离排序
限制0,20,,
在pricelist.storecode=storetable.storecode上加入storetable
在pricelist.upccode=itemlist.upccode上加入itemlist“,
mysql\u real\u escape\u字符串($latitude),
mysql\u real\u escape\u字符串($longitude),
mysql_real_escape_字符串($latitude));

联接位于错误的位置-它们位于FROM子句之后,WHERE子句之前-使用:

$query = sprintf("SELECT storetable.storeaddress, 
                         storetable.storename, 
                         storetable.lat, 
                         storetable.lng,
                         ( 3959 * acos( cos( radians('%s') ) * 
                         cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + 
                         sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance 
                    FROM pricelist 
                    JOIN storetable ON pricelist.storecode = storetable.storecode
                    JOIN itemlist ON pricelist.upccode = itemlist.upccode
                  HAVING distance < 25 
                ORDER BY distance 
                   LIMIT 0, 20",
                 mysql_real_escape_string($latitude),
                 mysql_real_escape_string($longitude),
                 mysql_real_escape_string($latitude));
$query=sprintf(“选择storetable.storeaddress,
storetable.storename,
storetable.lat,
storetable.lng,
(3959*acos(弧度('%s'))*
cos(弧度(纬度))*cos(弧度(lng)-弧度('%s'))+
sin(弧度('%s'))*sin(弧度(纬度)))作为距离
从价目表
在pricelist.storecode=storetable.storecode上加入storetable
在pricelist.upccode=itemlist.upccode上加入itemlist
距离小于25的
按距离排序
限制0,20“,
mysql\u real\u escape\u字符串($latitude),
mysql\u real\u escape\u字符串($longitude),
mysql_real_escape_字符串($latitude));

我不知道MySQL…但是为什么在加入之前要使用
ORDER BY
?@taspeotis:你是对的。正如OMG Ponies在下面指出的,ORDER BY在加入之后进行。感谢你为我展示了正确的加入顺序。我发现了一个语法错误:>SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解第13行“LIMIT 0,0”附近使用的正确语法。>20后面的逗号是否可能不正确?@Paul:错误消息与我发布的查询不一致。但是,有一个错误我删除的
LIMIT
中的尾随逗号。当我在PhpAdmin中运行此查询时,它工作得很好。但是,当我在程序中运行它时,它没有工作。我忘了提到我正在使用Php PDO。这会有什么不同吗?另一个有趣的事实:当我删除第二个join语句之后的所有内容时,查询工作得很好。@Paul:Sor呃,我不知道/使用PDO