What are the possible reason of WordPress database error: [Query was empty]?

时间:2016-04-07 10:53:41

标签: php mysql wordpress wordpress-plugin wordpress-theming

I have run into error below but it seems like I can't get proper error logs.

WordPress database error Query was empty for query made by

I had this codes that will throw almost similar to the error above.

$query_select = $wpdb->get_results($wpdb->prepare(
    " % "
    , 1
),ARRAY_A);

My question is, what are the possible codes that will throw query was empty like in my above code.

4 个答案:

答案 0 :(得分:1)

有一些可能的方法来获得这些类型的错误。以下用法可能对您有用,也可能没用。

使用$ wpdb对象

第一种方法 - 将$ wpdb声明为全局并使用它来执行返回PHP对象的SQL查询语句

Sub pTest()
    Dim co As ChartObject
    Dim ch As Chart
    Dim s As Series
    Dim p As Point

    Set co = Worksheets(1).ChartObjects(1)
    Set ch = co.Chart
    Set s = ch.SeriesCollection(1)
    i = 2
    Call copyChartTest(co, ch, i)
End Sub

Sub copyChartTest(ByRef co As ChartObject, ByRef cht As Chart, ByVal i As Integer)
    Dim ch As Chart ' The overlay chart
    Set ch = co.Duplicate.Chart

    ' Set callout
    ch.SetElement (msoElementDataLabelCallout)

    ' Invisibil-ate!
    With ch
        .ChartArea.Fill.Visible = msoFalse
        .SeriesCollection(1).Format.Line.Visible = False
        .ChartTitle.Delete
        .Legend.Delete
    For j = 1 To .SeriesCollection(1).Points.Count
        .SeriesCollection(1).Points(j).Format.Fill.Visible = msoFalse
        If j <> i Then .SeriesCollection(1).Points(j).HasDataLabel = False
    Next j
    End With

    ' Align the charts
    With ch
        .Parent.Top = cht.Parent.Top
        .Parent.Left = cht.Parent.Left
    End With
End Sub

第二种方法 - 利用$ GLOBALS超全局。不需要全局关键字(但可能不是最佳实践)

global $wpdb;
$results = $wpdb->get_results( 'SELECT * FROM wp_options WHERE option_id = 1', OBJECT );

有些用户在下面的堆栈交换链接中询问了这些类型的问题 To refer:

Another link to refer

答案 1 :(得分:1)

DataType方法为WordPress执行此功能,它支持类似sprintf()和vsprintf()的语法。

支持%s(字符串),%d(整数)和%f(浮点)格式。

SQL字符串文字中的所有%字符(包括LIKE通配符)必须以%%的形式进行双倍转义。

因此,如果我们调试您的代码,我们喜欢这样:

$wpdb->prepare

结果将是:$sql = $wpdb->prepare(" % ", 1); die( var_dump($sql) );

OMG是一个空字符串!这就是我们看到string ' ' (length=1)错误的原因。

prepare方法期望格式字符串包含以下任何内容; query was empty%d%s。因此,如果您希望SQL查询为%f,则需要将代码更改为:

1

或者,如果您希望SQL为$query_select = $wpdb->get_results( $wpdb->prepare('%d', 1), ARRAY_A ); ,则需要使用另一个%将其转义为:{/ p>

%

您可以在此处找到有关准备方法和占位符的更多信息Class Reference/wpdb « WordPress Codex

答案 2 :(得分:0)

当我们执行wp db query时,它会在上次查询中更改属性。 我不明白你的问题,但如果这对你有帮助,请遵循以下代码。

global $wpdb;
   $wpdb->get_results( $wpdb->prepare(" % " , 1 ) );
   if( $wpdb->last_error ){
    //print_r( $wpdb->dbh)   
    $dbh = $wpdb->dbh;
    echo $dbh->errno;  // if no == 1065 then query was empty
    echo $dbh->error; // Query was empty          
   }    

答案 3 :(得分:0)

https://codex.wordpress.org/Class_Reference/wpdb 看看例子。 准备必须有一个有效的SQL查询,其中包含查询中所需变量的占位符:

$wpdb->prepare( 
"
    SELECT sum(meta_value) 
    FROM $wpdb->postmeta //valid sql statements here
    WHERE meta_key = %s
", 
$meta_key)

同时你的代码什么都不做:

$wpdb->prepare(
" % " //no sql statements here
, 1 ...)

看起来你想要

select * from someTable where someField % 1 -- (it will return no rows)

所以,任何空查询都会返回此错误。