Question

To insert or update data if data exists, I was using 'REPLACE INTO...' in a var $query_string like this :

dbDelta( $query_string ); 

For some reason, the row is not insert. Why ?

Était-ce utile?

La solution

The reason is due to this code inside dbDelta() :

// Create a tablename index for an array ($cqueries) of queries.
foreach ( $queries as $qry ) {
    if ( preg_match( '|CREATE TABLE ([^ ]*)|', $qry, $matches ) ) {
        $cqueries[ trim( $matches[1], '`' ) ] = $qry;
        $for_update[ $matches[1] ]            = 'Created table ' . $matches[1];
    } elseif ( preg_match( '|CREATE DATABASE ([^ ]*)|', $qry, $matches ) ) {
        array_unshift( $cqueries, $qry );
    } elseif ( preg_match( '|INSERT INTO ([^ ]*)|', $qry, $matches ) ) {
        $iqueries[] = $qry;
    } elseif ( preg_match( '|UPDATE ([^ ]*)|', $qry, $matches ) ) {
        $iqueries[] = $qry;
    } else {
        // Unrecognized query type.
    }
}

ths function dbDelta() does not support 'REPLACE INTO' and that calls in the else with // Unrecognized query type. comment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top