mysql查询用"如果"声明

时间:2016-03-04 21:38:13

标签: php mysql wordpress

所以,我有以下php查询:

for($i = 0; $i < sizeof($cat_result) ; ++$i) {          
    $query_p    = "SELECT * FROM $table WHERE id = %d"; 
    $results[]  = $wpdb->get_row($wpdb->prepare($query_p, $cat_result[$i]));            
}   

搜索依赖于包含大量数字的$cat_result

例如,假设$cat_result包含以下数字:&#39; 1,3,5,21,35`

使用这5个数字,查询将查找数据库信息。

但是,有些情况下数据库中不存在某些数字(例如&#34; 21&#34;)。

然后,我得到PHP NOTICE: trying to get property of non-object

我如何写&#34;如果&#34;语句,以便如果id(在这种情况下&#34; 21&#34;)不存在,那么它只是忽略查询? (很难解释我的意思&#34;忽略&#34;。我仍然希望查询进行搜索,但如果它找不到它要查找的内容,那么只需忽略错误)。

2 个答案:

答案 0 :(得分:3)

我认为您应该重新构建查询。这样,只要您的数据被清理(以防止注入,因为我不确定它是否来自用户),您可以执行以下操作:

$cat_result = implode(",", $cat_result);
$query_p    = "SELECT * FROM $table WHERE id in ( $cat_result )";
$rslt       = $wpdb->get_results($query_p);
// loop result

这样,它会在该列表中获取所有内容。

答案 1 :(得分:1)

试试这个:

for($i = 0; $i < sizeof($cat_result) ; ++$i) {          
    $query_p    = "SELECT * FROM $table WHERE id = %d"; 
    $row = $wpdb->get_row($wpdb->prepare($query_p, $cat_result[$i]));
    if ($row) {
        $results[]  = $row;
    }    
}

我不知道WordPress,但我怀疑get_row在没有更多行结果时返回false。当发生这种情况时,您的代码将false放入$results,之后代码尝试将其用作对象。