PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-使用多个查询的复杂WordPress查询大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

因此,如果我直接在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则返回错误查询.

任何帮助,将不胜感激.

解决方法:

您的代码显示的不是一条sql语句,而是两条:

>创建时间限制[…] 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 );

大佬总结

以上是大佬教程为你收集整理的php-使用多个查询的复杂WordPress查询全部内容,希望文章能够帮你解决php-使用多个查询的复杂WordPress查询所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: