因此,如果我直接在MySQL中运行它,则我的查询工作正常,但是如果通过wordpress $wpdb-> query()运行它,则查询将失败.
如果我在页面上回显$qry并将其复制并粘贴到PHPMyAdmin中,例如,我会得到所有想要的结果.但是在wordpress中,我得到一个错误.
错误:
wordpress数据库错误:[您的sql语法有误;检查与您的MysqL服务器版本相对应的手册以获取正确的语法以在’SELECT *,ROUND(3963.0 * ACOS(SIN(38.580983 * PI()/ 180)* SIN(lat * PI()/ 18)’附近使用21]
查询:
CREATE TEMPORARY TABLE tmp_locations_tbl
SELECT post.ID,
post.post_name,
lat_Meta.Meta_value AS lat,
lng_Meta.Meta_value AS lng,
address_Meta.Meta_value AS address
FROM wp_posts AS post,
wp_postMeta AS lat_Meta,
wp_postMeta AS lng_Meta,
wp_postMeta AS address_Meta
WHERE post.ID = lat_Meta.post_id
AND post.ID = lat_Meta.post_id
AND post.ID = lng_Meta.post_id
AND lat_Meta.Meta_key = 'geo_latitude'
AND lng_Meta.Meta_key = 'geo_longitude'
AND address_Meta.Meta_key = 'address'
LIMIT 0, 5000;
SELECT *,
ROUND( 3963.0 * ACOS( SIN( 38.580983*PI()/180 ) * SIN( lat*PI()/180 ) + COS( 38.580983*PI()/180 ) * COS( lat*PI()/180 ) * COS( (lng*PI()/180) - (-121.4931*PI()/180) ) ) , 1)
AS distance
FROM tmp_locations_tbl
HAVING distance < 25
ORDER BY distance ASC
LIMIT 0, 200;
显然,它不喜欢’;’ -大概我想.但是,为什么这可以直接在MysqL中而不是在wordpress中正常运行.有趣的是,如果我删除“;”从将两个查询分开的查询中,wordpress没有通过PHPMyAdmin返回正确的结果,而MysqL则返回错误的查询.
任何帮助,将不胜感激.
解决方法:
>创建时间限制[…] 0,500;
> SELECT *,ROUND […] LIMIT 0,200;
据我所知,$wbdb->query()
一次仅接受一个语句(至少codex article并未指出它是为批量查询而设计的,我没有检查类代码进行验证).
尝试将这些语句放在两个不同的变量中,然后依次运行它们,如下所示:
$sql1 = "CREATE TEMPORARY [...] LIMIT 0, 500";
$sql2 = "SELECT *, ROUND[...] LIMIT 0, 200";
$wpdb->query( $sql1 );
$wpdb->query( $sql2 );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。