WordPress数据库错误:[查询为空]-使用$wpdb->Prepare()

时间:2011-10-30 作者:Jared

我已经编辑了我的问题,现在我得到了关于检查MySQL设置的错误。我将$sql\\u dvalues变量更改为具有值的数组,而不是逗号分隔的值,现在它显示以下内容:

WordPress database error: [您的SQL语法有错误;请查看与您的MySQL server版本相对应的手册,以了解第3行“”附近要使用的正确语法]

在wp\\U efpd\\U gmaps(时间、名称、地址、描述、标题)中插入值(\'2011-10-30 08:48:32\',\'test\',\'tedst\',\'tedst\',\'tedst\'),

我使用的原因$wpdb->prepare() 是因为我读了这一页:http://codex.wordpress.org/Class_Reference/wpdb 标题下Protect Queries Against SQL Injection Attacks 但也许我读错了,不需要用它?我不确定,如果你能给我一些建议,我将不胜感激。

较旧的便笺(&H);代码:我已经设置了一种方法,可以在不需要了解SQL的情况下,将内容添加到WP数据库中,这有点简单,我遇到了一个问题。查询代码输出良好(请参见下面的代码,die($str);) 但是,每当我试图通过添加一些数据来实际测试它时,它会给我以下错误:

WordPress database error: [查询为空]

它在某一点上工作,但没有插入任何数据,并给了我一个不同的错误,告诉我检查MySQL设置或之后要使用什么;,我真的不记得那是怎么说的,但我想先解决这个问题。

这是我在类中的函数Efpd2

public function efpd_prepare_db($data=array(),$table_name) {
    global $wpdb;
    $table_name = $wpdb->prefix.$table_name;
    
    $datenow = date(\'Y\\-m\\-d H\\:i\\:s\');
    
    $sql_values = \'time, \';
    $sql_cvalues = \'%s, \';
    $sql_dvalues = array($datenow);
    $int=0; $dcount = count($data);
    foreach($data as $dat){
        $int++;
        $sql_values .= $dat[\'name\'];
        if($int!=$dcount){
            $sql_values .= ", ";
        }
        $sql_cvalue .= $dat[\'type\'];
        switch($dat[\'type\']){
            case \'txt\': $sql_cvalues .= \'%s\'; break;
            case \'num\': $sql_cvalues .= \'%d\'; break;
            case \'float\': $sql_cvalues .= \'%f\'; break;
            default: die(\'Error writing to database, wrong value type. Use \\\'num\\\', \\\'float\\\' or \\\'txt\\\'.\');
        }
        if($int!=$dcount){
            $sql_cvalues .= ", ";
        }
        array_push($sql_dvalues,$dat[\'value\']);
    }
    
    $str = " 
    INSERT INTO $table_name
    ( $sql_values )
    VALUES ( $sql_cvalues ),
    $sql_dvalues
    ";
    // For debugging, use this:  die($str);
    //die($str);
    
    $wpdb->show_errors();
    $wpdb->query( $wpdb->prepare( 
        "
            INSERT INTO $table_name
            ( $sql_values )
            VALUES ( $sql_cvalues ),
        ",
        $sql_dvalues
    ) );
}
以及我用来添加数据的代码:

function add_sample_data(){     
    $efpd = Efpd2::efpd_prepare_db(
    array(
        0 => array(
            \'name\' => \'name\', // Name of the variable inside the table
            \'value\' => \'test\', // Value to add
            \'type\' => \'txt\' // Type of data to be added (\'num\' = %d, \'txt\' = %s, \'float\' = %f). See $wpdb->prepare() documentation on codex.wordpress.org
        ),
        1 => array(
            \'name\' => \'address\',
            \'value\' => \'tedst\',
            \'type\' => \'txt\'
        ),
        2 => array(
            \'name\' => \'description\',
            \'value\' => \'tedst\',
            \'type\' => \'txt\'
        ),
        3 => array(
            \'name\' => \'title\',
            \'value\' => \'tedst\',
            \'type\' => \'txt\'
        )
    ),
    \'efpd_gmaps\'); // Table to add data to
    unset($efpd);
}
add_action(\'init\',\'add_sample_data\');
这是使用die($str); 在里面Efpd2::efpd_prepare_db():

在wp\\U efpd\\U gmaps(时间、名称、地址、描述、标题)中插入值(%s,%s,%s,%s,%s,%s),“2011-10-30 07:27:53”,“测试”,“tedst”,“tedst”,“tedst”

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

您知道$wpdb->insert 确实是这样吗?

$wpdb->insert(
    \'table\', // Table name
    array(
        \'column\' => \'foo\',
        \'field\' => 1337,
    ), // Columns
    array(
        \'%s\',
        \'%d\',
    ) // Explicit formatting
 );

Right?

结束

相关推荐

AJAX wp-MySQL运行太慢

我做了一个ajax函数,它返回所有以特定字母开头的帖子,假设用户单击字母a,那么所有以字母a开头的帖子都会显示出来,无论我如何成功地运行此函数,但前提是我使用普通mysql,但我想使用wp mysql,我的代码将代表我;)echo $_GET[\'letter\']; $getLetter = $_GET[\'letter\']; global $wpdb; global $post; $result = $wpdb->get_results(\'SELEC