WordPress.org

Ready to get started?Download WordPress

Forums

Help with :: Missing argument 2 for wpdb::prepare() (7 posts)

  1. Jim R
    Member
    Posted 1 year ago #

    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;
    }
  2. Read http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/

    Your site is fine, but you may wish to turn off PHP's display errors setting. Contact the plugin developer and point them to the link above so they can fix the underlying issue.

  3. Jim R
    Member
    Posted 1 year ago #

    I'm sort of the plugin author. I was trying to write my own code, and in asking for help someone just wrote that above. It worked perfectly. I think it was from WP Tavern, which is no longer operative as a forum. I asked over there to see if they had any archived data with my post/topic participation but have no response yet.

    It's not executing the plugin, though it is posting to the site. It's supposed to pass tag taxonomy to a custom data table of mine, so I can link the tag/term id to basketball players in that table. That way I can pull their information from that table to my site and print it on their tag archive page.

  4. So what exactly is working or not working right now?

  5. Jim R
    Member
    Posted 1 year ago #

    I'm getting these errors:

    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

    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

    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

    Warning: Cannot modify header information - headers already sent by (output started at /home/jwrbloom/public_html/wp-includes/wp-db.php:990) in /home/jwrbloom/public_html/wp-includes/pluggable.php on line 876

    I've changed my last query to:

    $wpdb->query( $wpdb->prepare("
    UPDATE ".S_DB."
    SET ".S_DB.".wpID = case wpSlug
    $mstr end
    WHERE ".S_DB.".wpSlug in(%s)"), $lstr);

    Trying to adapt to what WP 3.5 seems to want, but I had to get help to make sense of it. That said, it didn't change anything. Having worked in the past, the plugin is no longer working.

  6. willy24
    Member
    Posted 1 year ago #

    hi everybody,
    I have the same issue.
    On my side, i use dt-nimble theme and i have these messages since i made the upgrade to WP 3.5

    Warning: Missing argument 2 for wpdb::prepare(), called in /home/xxxxx/public_html/wp-content/themes/dt-nimble/functions/core/core-filters.php on line 8 and defined in /home/xxxxx/public_html/wp-includes/wp-db.php on line 990

    Warning: Missing argument 2 for wpdb::prepare(), called in /home/xxxxx/public_html/wp-content/themes/dt-nimble/functions/core/core-functions.php on line 81 and defined in /home/xxxxxx/public_html/wp-includes/wp-db.php on line 990

    Can i have help in simple and comprehensive words for a non expert ?

    if no issue, can i at least hide this message ?

    thank you very much

  7. @willy24:

    It's impolite to interrupt another poster's ongoing thread with a question of your own and it causes significant problems for the forum's volunteers. Please post your own topic.

    Read http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/

    Your site is fine, but you may wish to turn off PHP's display errors setting. Contact the theme developer for dt-nimble and point them to the link above so they can fix the underlying issue.

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags

No tags yet.