为什么我不能从$wpdb->Get var返回值?

时间:2021-06-26 作者:David Weisser

我试图在满足条件时从表中删除记录。条件是:如果表1中有一条记录与表2中的记录不匹配,则从表1中删除该记录。

$survey_mapping =$wpdb->get_results( $wpdb->prepare("SELECT surveyid from oc_partner_x_survey")); 
 foreach($survey_mapping as $row){
     $dup_survey2 =absint($wpdb->get_var( $wpdb->prepare("SELECT surveyls_survey_id FROM oc_surveys_languagesettings WHERE surveyls_survey_id =%d",$row)));   
    if (absint($dup_survey2) > 0) { 
        $error_msg1[] = $dup_survey2;
    } else {
        $error_msg2[0] = $row;
        $error_msg2[1] = $dup_survey;
        $error_msg2[2] = $survey_mapping;

        $wpdb->delete(\'oc_partner_x_survey\', 
        array(\'surveyid\' => absint($row)),array(\'%d\'));     
    }
}   
这是从控制台发出的。您可以看到变量$dup\\U survey是如何为空的。

error_msg1":null,"error_msg2":[{"surveyid":"748254"},0,[{"surveyid":"955287"},{"surveyid":"748254"}]]}
下面是表1:
enter image description here

下面是表2:
enter image description here

我被卡住了。任何帮助或见解都将不胜感激!谢谢大家<大卫(David)

1 个回复
最合适的回答,由SO网友:nmr 整理而成

get_results() 默认情况下,将每个数据库行作为对象返回,因此$survey_mapping 是一个对象数组。因此,您应该更换$row 具有$row->surveyid 在第二个查询中:

$dup_survey2 = absint( $wpdb->get_var( 
   $wpdb->prepare("SELECT surveyls_survey_id FROM oc_surveys_languagesettings WHERE surveyls_survey_id = %d", $row->surveyid)
)); 
并且在$wpdb->delete():

array(\'surveyid\' => absint($row->surveyid))
顺便说一下,您可以使用一个SQL查询从oc_partner_x_survey 在中没有匹配项oc_surveys_languagesettings:

DELETE oc_partner_x_survey 
FROM oc_partner_x_survey 
  LEFT JOIN oc_surveys_languagesettings ON oc_surveys_languagesettings.surveyls_survey_id = oc_partner_x_survey.surveyid 
WHERE 
  oc_surveys_languagesettings.surveyls_survey_id IS NULL

相关推荐

客观和基于证据的WordPress和PHP是否会消亡,因为未来是由前端渲染而不是服务器端渲染组成的?

一个叫Pablo的朋友告诉我要学习WordPress CMS,但另一个叫Lucas的朋友告诉我要学习Strapi CMS,因为服务器端渲染和PHP一般都越来越倾向于使用react、angular或vue等工具进行前端渲染。I do not want your opinion 因为在这个平台上严禁发表意见,他们会让版主关闭这个问题。我想要基于真实证据的事实和可靠的论据来证明WordPress和通过PHP的服务器端呈现在未来30年内是否真的被新的javascript玩具所取代(实际上,如果我还活着的话,我将在