【问题标题】:Wordpress: How to unescape the results when using $wpdb->get_results?Wordpress:使用 $wpdb->get_results 时如何取消转义结果?
【发布时间】:2012-08-15 03:08:34
【问题描述】:

要向数据库添加新行,我使用$wpdb->insert,并获取我使用$wpdb->get_results 的行。

问题在于$wpdb->insert 似乎正在转义输入。例如,a"b 在数据库中保存为a\"b。但是,$wpdb->get_results 似乎并没有将a\"b 转义为a"b

这是设计上的正确行为吗?

我应该手动取消$wpdb->get_results 的结果吗? (这个的正确功能是什么?)

【问题讨论】:

    标签: escaping wordpress


    【解决方案1】:

    $wpdb->insert()$wpdb->prepare() 将转义数据以防止 SQL injection attacks$wpdb->get_results() 函数被设计为与 SQL SELECT 语句一起工作,所以我相信斜杠留在原处是故意的。这允许数据的使用者在必要时对其进行处理。

    由于$wpdb->get_results() 函数返回一个stdClass 对象数组,为了删除每一行中所有列中的斜线,您必须遍历行,并遍历运行PHP @ 的每个行对象的属性987654329@函数就可以了。

    foreach( $quotes as &$quote ) {
        foreach( $quote as &$field ) {
            if ( is_string( $field ) )
                $field = stripslashes( $field );
        }
    }
    

    关于 wpdb->get_results() 函数的更多信息: http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

    【讨论】:

      【解决方案2】:

      http://codex.wordpress.org/Function_Reference/stripslashes_deep

      //replace $_POST with $POST
          $POST      = array_map( 'stripslashes_deep', $_POST);
          $wpdb->insert( 
                  'wp_mytable', 
                  array( 
                      'field_name'        => $POST['field_name'], 
                      'type'              => $POST['type'],
                      'values'            => serialize($POST['values']),
                      'unanswered_link'   => $POST['unanswered_link'], 
                  ), 
                  array( 
                      '%s','%s','%s','%s'
                  ) 
              );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多