所以,我有以下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;。我仍然希望查询进行搜索,但如果它找不到它要查找的内容,那么只需忽略错误)。
答案 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
,之后代码尝试将其用作对象。