gpt4 book ai didi

php - 使用多个查询的复杂 Wordpress 查询

转载 作者:可可西里 更新时间:2023-11-01 07:33:00 25 4
gpt4 key购买 nike

所以我有一个查询,如果我直接在 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 没有返回正确的结果,而 MySQL 通过 phpMyAdmin 表示这是一个不正确的查询。

如有任何帮助,我们将不胜感激。

最佳答案

这似乎是 PHP 本身的限制,参见 this post on the Wordpress forums .

我遇到了同样的问题并最终创建了一个自定义函数来完成这项工作,我将它粘贴在这里以防它对某人有用。该函数相当简单,因为它做了一些假设,但应该很容易修改它以满足不同的需求。具体来说,它假设:

  • 所有语句都是插入和更新,没有数据返回。
  • 语句以行尾顺序分隔。
  • 语句包含在事务中。

函数如下:

function execute_multiline_sql($sql) {
global $wpdb;
$sqlParts = array_filter(explode("\r\n", $sql));
foreach($sqlParts as $part) {
$wpdb->query($part);
if($wpdb->last_error != '') {
$error = new WP_Error("dberror", __("Database query error"), $wpdb->last_error);
$wpdb->query("rollback;");
return $error;
}
}
return true;
}

使用示例:

$sql = "start transaction;\r\n" .
"insert into ...;\r\n" .
"update ...;\r\n" .
"commit;\r\n"
;

$result = execute_multiline_sql($sql);
if(is_wp_error($result)) {
//Fail!
}

关于php - 使用多个查询的复杂 Wordpress 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com