Help with :: Missing argument 2 for wpdb::prepare()
-
I have a post on the plugin board, but I’ve since learned that ” Missing argument 2 for wpdb::prepare() ” is a function of how queries interact with WP database. It’s over my head, and I had a lot of help in the code written below.
I’ve seen some samples of how to fix it, but I’m not sure how to apply it to my query at the very bottom, which is where I’m getting the error.
Warning: Missing argument 2 for wpdb::prepare(), called in /home/jwrbloom/public_html/wp-content/plugins/save-on-post/save-on-post.php on line 68 and defined in /home/jwrbloom/public_html/wp-includes/wp-db.php on line 990
Here is the code. Line 68 is about three lines from the bottom.
Plugin Name: Save with post Plugin URI: Description: Updates a secondary table in the database when a post is saved. Version: 0.1 */ // Your custom table name define('S_DB','a_playerRank'); add_action('save_post', '__and_upd_other'); add_action('edit_post', '__and_upd_other'); function __and_upd_other( $post_id ) { global $wpdb; if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id; if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $post_tag = ($_POST['tax_input']['post_tag']) ? $_POST['tax_input']['post_tag'] : ''; if('' != $post_tag) : $post_tag = explode(',',$post_tag); $ptc = 0; // Build string of OR matches for the query foreach($post_tag as $tag) { $ptc++; if($ptc == 1) { $tt = "terms.name = '$tag'"; } else { $tt .= " OR terms.name = '$tag'"; } } // Get the tag ids and slugs for the saved post $tags = $wpdb->get_results(" SELECT terms.term_id, terms.slug FROM $wpdb->terms as terms JOIN $wpdb->term_taxonomy as tax ON tax.term_id = terms.term_id JOIN $wpdb->term_relationships as rel ON rel.term_taxonomy_id = tax.term_taxonomy_id WHERE rel.object_id = '$post_id' AND tax.taxonomy = 'post_tag' AND $tt ", ARRAY_A); // Create 2 empty strings $mstr = $lstr = ''; // Build a case string for the next query foreach($tags as $t => $tag) { $mstr .= "when '$tag[slug]' then '$tag[term_id]' "; $lstr .= "'$tag[slug]',"; } // Unset unused data unset($tags); // Remove the last comma off the second string $lstr = substr($lstr,0,-1); // Create the a nifty query to do multiple updates in one query $wpdb->query( $wpdb->prepare(" UPDATE ".S_DB." SET ".S_DB.".wpID = case wpSlug $mstr end WHERE ".S_DB.".wpSlug in($lstr)")); endif; return; }
- The topic ‘Help with :: Missing argument 2 for wpdb::prepare()’ is closed to new replies.