如何检查数据库中是否已有内容,如果没有,则输入内容?

时间:2013-02-07 21:36:08

标签: php mysql wordpress wpdb

我制作了一个简单的php类,它从astrology.com中提取占星符号的每日占星,我想在wordpress中使用它(使用$ wpdb)。

工作原理(理论上):

  1. 检查内容是否已存在于数据库中(并将其返回)。
  2. 如果它不在数据库中的内容已经添加它(调用我制作的php类)。
  3. 如果类没有返回内容,则检查数据库是否有前一天的条目并将其返回。
  4. 如果这些都无法返回错误消息
  5. 问题是我被卡在第2点和第3点之间...(我不知道如何检查班级是否正在返回某些内容,如果没有显示前一天的内容)

    <?php require('./wp-blog-header.php');
    
    $horoscope = new Horoscope(); global $wpdb;
    
    $config = array('sign' => 'cancer',
                    'type' => 'daily',
                    'date' => date('Y-m-d'),);
    
    $query = $wpdb->get_results("SELECT * FROM `wp_horoscope` WHERE zodiacal_sign = '".$config['sign']."' AND last_updated = '".$config['date']."';", ARRAY_A);
    
    // step 1
    if( $query && $query['0']['content'] != '' ){ $content = $query['0']['content']; }
    
    // step 2
    elseif( empty($query) || $content === '' ){
    $content = $horoscope->get_daily_horoscope($config);
    $fetched_content = $content;
    $update = $wpdb->prepare("INSERT INTO `wp_horoscope` (`last_updated`, `content`, `zodiacal_sign`) values (%s,%s,%s)", $config['date'], $content, $config['sign']);
    $wpdb->query($update);}
    
    // step 3
    elseif( $fetched_content === '' ) { // if previous function `get_daily_horoscope` does not return any content return the content for previous day
    $yesterday_date = date('Y-m-d', strtotime('- 1 day'));
    $query = $wpdb->get_results("SELECT * FROM `wp_horoscope` WHERE zodiacal_sign = '".$config['sign']."' AND last_updated = '".$yesterday_date."';", ARRAY_A);
    $content = $query['0']['content']; }
    
    // step 4
    else{$content = 'The information is not in the DB';}
    
    echo $content;
    
    ?>
    

    有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:2)

由于内容未初始化,您总是会点击// step 2,因此elseif ( empty($query) || $content == '' )将始终返回true,因为未声明的$content将“等于”''。

您可以尝试:$content === ''(注意额外的“=”),除非事实上是空字符串,否则不会为真。

答案 1 :(得分:2)

在我看来,你永远不会进入第3步,因为第3步的情况在步骤2中得到满足。

elseif( a || b) {

}
elseif( b ) {

}

如果b为真,你永远不会得到else(b),因为b在elseif(a || b)中已经是真的。