gpt4 book ai didi

php - 将 IN 与数组一起使用时如何使用多个 WHERE 语句

转载 作者:行者123 更新时间:2023-11-30 01:16:18 25 4
gpt4 key购买 nike

我有以下代码:

function av_connections_search($string){
global $wpdb;
// remove url parameter from string
$string = trim($string,'s=');
$search = explode('%20',$string);
// query the wp_connections database table according to search entry
$sql = "
SELECT *
FROM {$wpdb->prefix}connections
WHERE contact_first_name IN (".implode(', ', array_fill(0, count($search), '%s')).")
";
// prepare() to prevent sql injection
$query = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($sql), $search));
// get query results
//var_dump($query);
$results = $wpdb->get_results($query);
// return if no results
if(empty($results)){
return false;
}
// flush $wpdb cache
$wpdb->flush();
// return data to search.php
return $results;
}

传递给函数时,$string 看起来像 ?s=search+这些+terms

我的问题是,如何使用多个 WHERE 语句?我简单地尝试过:

WHERE contact_first_name IN (".implode(', ', array_fill(0, count($search), '%s')).")
OR contact_last_name IN (".implode(', ', array_fill(0, count($search), '%s')).")

但它完全失败了。当我这样做时:

WHERE contact_first_name OR contact_last_name IN (".implode(', ', array_fill(0, count($search), '%s')).")

它仅返回contact_last_name。我错过了什么?

编辑:好的,所以我很确定问题出在于此:

$query = call_user_func_array(array($w​​pdb, 'prepare'), array_merge(array($sql), $search));

但是,由于缺乏 sleep ,我无法理解为什么它不将数组与两个 WHERE 子句合并。

编辑 2 这应该不起作用吗?如果我使用单个 WHERE 子句,效果很好,但是当我使用 OR 和另一个子句时,它不会返回任何内容,这没有任何意义,因为这是查询:

从 wp_connections WHERE 中选择 *contact_first_nameIN (%s, %s) 或 contact_last_nameIN (%s, %s) "[1]=>字符串(4)“米娜”[2]=>字符串(5)“莫尔斯电码”

编辑3 我不认为prepare() 是问题所在。考虑这个(不起作用):

global $wpdb;
$string = trim($string,'s=');
$search = explode('%20',$string);
$how_many = count($search);
$placeholders = array_fill(0, $how_many, '%s');

$format = implode(', ', $placeholders);

$query = "SELECT * FROM wp_connections WHERE contact_first_name IN($format) OR contact_last_name IN($format)";

$results = $wpdb->query($query, $search);
return $results;

即使完全删除准备,结果也是一样。我缺少什么?如果我删除 OR 条件并仅检查一个值,它可以正常工作,但 OR 会终止查询。

编辑 4 事实证明,这就是解决方案:

$results = $wpdb->query($query, $search, $search);

我错过了第二个 $search 变量... *仍然挠头

最佳答案

试试这个

WHERE contact_first_name IN (".implode(', ', array_fill(0, count($search), '%s')).") OR contact_last_name IN (".implode(', ', array_fill(0, count($search), '%s')).")

更新

这个问题的正确答案是查询是正确的,是动态参数错误导致查询语法错误。实际上就在这个答案下面的评论部分,因此将其与已接受的答案合并!

关于php - 将 IN 与数组一起使用时如何使用多个 WHERE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19025648/

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