wordpress $ wpdb работает только один раз

Я работаю над плагином, который должен запускать множество разных запросов. Я создал класс, который имеет много функций, и все эти функции выполняют разные запросы. DAL в принципе.

Теперь, когда я вызываю эти функции в своей программе, все они работают нормально, но только один из них выполняет свой запрос. Все остальные запросы во всех других вызовах функций не выполняются.

Все функции выполняют свои запросы отлично, если я вызываю только одну функцию в программе.

Я не могу понять, в чем проблема?

вот какой код

СОДЕРЖАНИЕ НИЖЕ ДОБАВЛЕННОГО ПОЗЖЕ

Это настоящие функции, которые приносят мне неприятности.

Я называю их всех, все они работают. Но только один из них (тот, который называется последним) выполняет свой запрос. Все они выполняют свои запросы, если я звоню только одному из них.

class seoklaxxdataAccess{ function addKeyword_start($row_id, $row_keyword, $oldKeyword, $seo_pageContents){ try { global $wpdb; $seo_tblPosts = $wpdb->prefix."posts"; // COMMENT: gets the length of old keyword $org_keywordLength = strlen($oldKeyword); $keywordLength = $org_keywordLength+3; $seo_checkKeyword = substr($seo_pageContents, 0, $org_keywordLength); if($oldKeyword){ if($seo_checkKeyword==$oldKeyword){ $seo_pageContents = substr($seo_pageContents, $keywordLength); } $seo_pageContents = $row_keyword.' - '.$seo_pageContents; }else{ $seo_pageContents = $row_keyword.' - '.$seo_pageContents; } //echo $seo_pageContents."<br>"; $wpdb->update($seo_tblPosts, array('post_content'=>$seo_pageContents), array('ID'=>$row_id)); } catch(Exception $e) { return "not working:".$e->getMessage(); } } function addKeyword_end($row_id, $row_keyword, $oldKeyword, $seo_pageContents){ global $wpdb; $seo_tblPosts = $wpdb->prefix."posts"; // COMMENT: gets the length of old keyword $org_keywordLength = strlen($oldKeyword); $keywordLength = $org_keywordLength+3; $seo_checkKeyword_end = substr($seo_pageContents, -$org_keywordLength); if($oldKeyword){ if($seo_checkKeyword_end==$oldKeyword){ $seo_pageContents = substr($seo_pageContents,0 , -$keywordLength); } $seo_pageContents = $seo_pageContents.' - '.$row_keyword; }else{ $seo_pageContents = $seo_pageContents.' - '.$row_keyword; } $seo_sqlcommand = "UPDATE ".$seo_tblPosts." SET post_content = '".$seo_pageContents."' WHERE ID = '".$row_id."' ;"; //SELECT * FROM wp_seo_keywords WHERE id = ".$row_id.";"; //echo "done".$seo_pageContents."<br>"; $wpdb->get_var($wpdb->prepare($seo_sqlcommand)); } 

}

Это как я создал экземпляр класса

 $seo_dataAccess = new seoklaxxdataAccess(); 

и вот как я называю функции

 $seo_dataAccess->addKeyword_start($row_id, $row_keyword, $oldKeyword, $seo_pageContents); $seo_dataAccess->addKeyword_end($row_id, $row_keyword, $oldKeyword, $seo_pageContents); $seo_dataAccess->addKeyword_middle_bold_linked($row_id, $row_keyword, $oldKeyword, $seo_pageContents); 

Solutions Collecting From Web of "wordpress $ wpdb работает только один раз"

Не пытайтесь использовать wpdb для обновления содержимого сообщения, вместо этого используйте wp_update_post!

http://codex.wordpress.org/Function_Reference/wp_update_post

Вместо

 $wpdb->update($seo_tblPosts, array('post_content'=>$seo_pageContents), array('ID'=>$row_id)); 

Делать:

 // Update post 37 $my_post = array(); $my_post['ID'] = $row_id; $my_post['post_content'] = $seo_pageContents; // Update the post into the database wp_update_post( $my_post ); 

В качестве побочного преимущества он запускает все крючки, поэтому кеширование работает так, как должно, RSS-каналы обновляются, и т. Д.

Существует очень мало причин манипулировать почтовой таблицей с помощью wpdb. Есть много, много веских причин и преимуществ для использования функций редактирования отчетов WP Core.

И как всегда, практикуйте безопасную обработку данных, проверяя дезинфекцию и ускользание ваших данных, иначе автоматизированные программы могут протестировать ваш сайт и найти ужасные ужасные дыры в безопасности и сломать все ужасно.

Почему вы действительно должны заботиться и придерживаться 100% в ядре, когда делаете забавные вещи DB

  1. Портативность – код БД может и должен работать повсюду. Префикс wp_ является только по умолчанию, который может быть изменен в файле wp-config.php каждым новичком. Плюс: рекомендуется, чтобы вы это сделали. Добавление префикса изменит запрос «на лету» и продолжит работу в средах, где у вас есть пользовательские настройки.

     // If you're writing plugins, then you have to consider different installations // as well as edge cases, customization and other funky things, your users might do // So use the following: echo $wpdb->posts; // Posts table echo $wpdb->options; // Options table echo $wpdb->users; // Users table echo "{$wpdb->prefix}YOUR_CUSTOM_TABLE_NAME_HERE"; // Custom table 
  2. Безопасность Nr. 1 – Вы не хотите, чтобы кто-то пропустил ваш запрос. FYI: $wpdb->prepare() .

     # Basically it's like a "safe" sprintf/printf // You can use %d for int and %s for strings $wpdb->prepare( "SELECT * FROM $wpdb->posts as p WHERE %d = p.ID", 5 ); 
  3. Безопасность Nr. 2 – используйте функции esc_* чтобы получить esc_* сохранения.

     // Normal queries $add_query_data = esc_attr( $input ); // LIKE queries $add_query_data = like_escape( $input ); 
  4. Безопасность Nr. 3 – Отображение ошибок означает отображение имен таблиц, префиксов и других. Это одна из редких ситуаций, когда «безопасность через безвестность» – хорошая идея.

     // Don't show SQL errors to anyone except admin users (manage_options capability) $wpdb->hide_errors(); if ( current_user_can( 'manage_options' ) $wpdb->show_errors(); 

Дальнейшие чтения …

… о классе $wpdb можно найти в Codex.