使用$wpdb更新显示错误

时间:2011-05-05 作者:Jarred

我正在使用$wpdb->update 更新数据库中的自定义表。当我var_dump 它返回的结果:

int(0)
所以我试过了$wpdb->print_error() 看看有什么问题。然而,它没有显示任何内容。我也试过了$wpdb->show_errors(), 但又一次,它什么也没表现出来。

这个wpdb docs 关于如何使用这些函数,我不太清楚,所以我不确定我是否正确使用了它们。但是,为什么更新表的结果返回0,而不显示任何错误?

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

我建议您在查询后立即运行以下代码,以查看发生的情况:

exit( var_dump( $wpdb->last_query ) );
这将打印命中数据库的最后一个查询。在这样的情况下,我通常会通过phpMyAdmin手动运行这样的查询,以查看它是否运行时没有错误,以及它是否会影响数据库。此外,通过查看实际运行的查询,您可能会在代码生成的查询中发现问题。例如,查询可能不会返回任何MySQL错误,但它可以运行与您预期不同的查询。使用此调试代码,您至少能够看到它是什么,并继续进行精彩的调试!此外,您可能想探索更多的“类变量”(Codex Ref) 对于$wpdb 因为它们可能有助于进一步解决您的问题。

SO网友:kaiser

显示错误:

  • $wpdb->show_errors = true 自动显示错误,如果WP_DEBUG 设置为true.
  • $wpdb->suppress_errors = false 停止抑制错误。

    多个站点需要特殊处理

    // Show errors in Multisite:
    global $wpdb, $blog_id;
    // There\'s no is_multisite(), so we need to check the ID
    // This means, that we can\'t debug the blog with the ID 1 as MU-blog by default
    // Check if we are on Blog ID#1 and if not, check the defines and add error handling
    if ( 1 !== $blog_id )
        ! defined( \'DIEONDBERROR\' ) AND define( \'DIEONDBERROR\', true );
    
    输出处理$wpdb->update() 方法有三种不同的输出。要对照它进行检查,必须将结果保存为变量:$result = $wpdb->update( /* ... */ );.

    处理这些场景:

    • false === $result: 失败0 === $result: 成功,但没有更新0 < $result: 成功
      • 类输出

        • $wpdb->last_error 将显示最后一个错误(如果有)
        • $wpdb->last_query 将帮助您显示上次查询(错误发生的位置)。基本上与array_pop( $wpbd->queries );.NOT 在现场添加此代码。尤其是涉及缓存插件时。今年5月expose important DB-related data to visitors!

          如果不能这样做:请始终将代码包装在条件语句中,以防止面向公众的调试输出!

          // Example
          function debug_query( $result, $data )
          {
              global $current_user;
              get_currentuserinfo();
          
              if ( current_user_can( \'manage_options\' ) )
              {
                  global $wpdb, $blog_id;
                  1 !== $blog_id
                      AND ! defined( \'DIEONDBERROR\' )
                          AND define( \'DIEONDBERROR\', true );
          
                  $wpdb->show_errors     = true;
                  $wpdb->suppress_errors = false;
          
                  $output = \'<pre style="white-space:pre-line;">\';
                      $output .= \'Last Error: \';
                      $output .= var_export( $wpdb->last_error, true );
          
                      $output .= "\\n\\nLast Query: ";
                      $output .= var_export( $wpdb->last_query, true );
          
                      if ( false === $result )
                      {
                          $result = new WP_Error( \'query_failed\', \'No update.\', $data );
                      }
                      elseif ( 0 === $result )
                      {
                          $result = new WP_Error( \'update_failed\', \'Updated zero rows.\', $data );
                      }
                      elseif ( 0 < $result )
                      {
                          $result = \'Success\';
                      }
                  $output .= \'</pre>\';
          
                  // Only abort, if we got an error
                  is_wp_error( $result ) 
                      AND exit( $output.$result->get_error_message() );
              }
          }
          
          暴露$wpdb 对象还可能公开您的数据库用户名和密码!

SO网友:goldenapples

零响应意味着零行受影响,这与错误不同。

如果不查看您的查询,很难说为什么没有更新行。您可以尝试的一个调试工具是设置“SAVEQUERIES“在wp-config.php文件中为true。

然后在查询运行后,尝试var_dumping公司$wpdb->queries.

SO网友:Emil
$wpdb->show_errors();
$wpdb->print_error();
SO网友:Volomike

在查询之前尝试以下操作:

$wpdb->show_errors = TRUE;
$wpdb->suppress_errors = FALSE;
或者在您的查询之后:

if ($wpdb->last_error) {
  die(\'error=\' . var_dump($wpdb->last_query) . \',\' . var_dump($wpdb->error));
}

结束

相关推荐

正在进行SQL查询...尝试将其调整为使用$wpdb

因此,我有这段代码可以查询wp数据库中自定义插件生成的表。它工作正常。但我正在尝试将其调整为使用$wpdb,而不是我设置的$con函数。下面是工作正常但不使用$wpdb的代码:<?php $q = strtolower($_GET[\"q\"]); if (!$q) return; $isArabic = is_arabic($q); $con=mysql_connect(\"localhost\",\"admin\",\"*****\"); if(