分类: PHP and MySQL

  • 实用WordPress SQL语句集锦:第四章

    在《实用WordPress SQL语句集锦:第三章》中,我们讲解了手工重置密码和变更WordPress域名的方案。本篇我们谈谈显示SQL查询执行次数和恢复数据库的内容。

    7、在博客上显示SQL查询执行次数

    useful-wordpress-sql-hacks-07

    问题。如果我们打算优化博客页面的加载时间,了解对数据库发起的查询次数是很有必要的。为了减少数据库查询次数,首先要知道在单个页面上有多少查询生成。

    方案

    1. 这次无需登录phpMyAdmin。只需打开主题的footer.php文件,并追加以下代码行:
      <?php if(is_user_logged_in()) { ?>
      <?php timer_stop(1); ?> 秒内执行 
      <?php echo get_num_queries(); ?> 次查询。
      <?php } ?>
    2. 保存文件并访问你的博客。在页脚中,我们会看到向WordPress数据库发起查询的次数以及执行这些查询所花费的时间。

    解释。似乎很多WordPress用户不知道这个有用的函数。“get_num_queries()”函数返回页面加载过程中执行的查询数。

    需要注意的是,上述结果只对登录用户显示,因为该指标对一般访问者和搜索引擎机器人没有意义。如果你想要将查询数完全公开,只需删除“if (is_user_logged_in())”这个判断条件即可。

    来源

    8、恢复WordPress数据库

    useful-wordpress-sql-hacks-08

    问题。如果出于某些原因,比方说网站被黑或升级出错,造成了博客数据的丢失或破坏。在你做了数据备份的情况下(希望如此!),将备份文件导入WordPress数据库即可完成恢复。

    方案

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 在横向列示的菜单上点击“导入”按钮。
    3. 点击“浏览”按钮并选择硬盘上最新的数据库备份文件。
    4. 点击“执行”按钮。如果一切顺利的话,你的WordPress数据库又恢复正常了。
  • 实用WordPress SQL语句集锦:第三章

    在《实用WordPress SQL语句集锦:第二章》中,我们分析的是关于批量删除待审核评论和变更日志归属的SQL命令。这一章我们讲解手工重置密码和变更WordPress域名的方案。

    5、手动重置密码

    useful-wordpress-sql-hacks-05

    问题。为了加强对博客的保护,人们往往选择强密码,如u7* KoF5i8_这样的字符串。这个习惯很好,但我也听到不少忘记密码的故事,绝对的杯具啊。

    方案。虽说遗失密码后,WordPress可以发送电子邮件,让你通过一个链接完成密码重置。但是,如果你不能访问WordPress数据库中记录的电子邮件地址了,或者你比较喜欢运行一个简单的命令来解决该问题,那么下面的方法绝对适合你。

    1. 登录phpMyAdmin,选择WordPress数据库,然后打开SQL窗口。
    2. 输入以下命令(假设你的用户名是“admin”):
      UPDATE wp_users 
      SET user_pass = MD5('PASSWORD') 
      WHERE wp_users.user_login = 'admin' LIMIT 1;
    3. 大功告成。原密码已经被修改为上述语句中标记为“PASSWORD”的字符串。

    解释。用户密码存储在wp_users表中。当然,密码是经过MD5哈希加密的。

    我们提交一个“UPDATE”SQL请求,并使用MySQL内建的MD5函数将新密码转换为MD5值,然后更新原密码。“WHERE”子句确保我们仅更新管理员账号的密码。注意:未经“WHERE”条件限制的语句将导致所有用户密码全部被更新!

    来源

    6、变更WordPress域名

    useful-wordpress-sql-hacks-06

    问题。虽然我们不建议这么做,但有时你可能希望变更博客域名,同时保留原有数据。由于WordPress将域名记录在数据库中,我们必须更新数据库相应条目,以建立新域名与原博客的关联。

    方案

    1. 你猜对了:首先要做的仍然是登录phpMyAdmin,然后选择WordPress数据库。
    2. 点击“SQL”按钮,打开SQL命令窗口。要改变WordPress URL地址,先执行这个命令:
      UPDATE wp_options 
      SET option_value = replace(option_value, 'http://www.oldsite.com', 'http://www.newsite.com') 
      WHERE option_name = 'home' OR option_name = 'siteurl';
    3. 然后,我们要变更各日志的相对URL(GUID)。以下命令能完成该项工作:
      UPDATE wp_posts 
      SET guid = replace(guid, 'http://www.oldsite.com', 'http://www.newsite.com');
    4. 任务接近完成。我们要做的最后一项工作是更新wp_posts表,以确保没有任何绝对URL仍使用原域名:
      UPDATE wp_posts 
      SET post_content = replace(post_content, 'http://www.oldsite.com', 'http://www.newsite.com');
    5. 大功告成。现在我们应该能够使用新网址登录到WordPress控制板了。

    解释。要轻松改变WordPress域名,我们可以借助于超有用的MySQL函数“replace”,即,以一个字符串取代另一个。

    来源

  • 实用WordPress SQL语句集锦:第二章

    在《实用WordPress SQL语句集锦:第一章》中,我们论述了备份数据库和批量删除文章修订的方法。接下来我们分析关于批量删除待审核评论和变更日志归属的SQL命令。

    3、瞬间删除5000条垃圾评论

    useful-wordpress-sql-hacks-03

    问题。真人真事:我的一个朋友最近搭建了自己的博客,并开始在网上四处推广。经过几个星期的紧张工作,他休了几天假没有上网。

    回到家里他看了看博客,结果看到…超过5000条待审核评论!当然,其中大多数是垃圾评论,本来他打算逐一检验,以确保不会删掉一般读者的有效评论。

    方案。令人高兴的是,友人把他的垃圾留言问题告诉了我。在我向他展示下面这条有用的SQL语句前,他已经花了45分钟手工删除垃圾评论。

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 点击“SQL”按钮。将以下代码粘贴到SQL命令窗口:
      DELETE from wp_comments 
      WHERE comment_approved = '0';
    3. 向垃圾评论说再见!享受未受垃圾评论侵扰的数据库吧!

    解释。wp_comments表包含一个名为comment_approved的字段,取布尔值(1或0)。通过审核的评论该值为1,待审核的评论取0值。通过运行上面的命令,我们删除了全部待审核评论。

    谨慎行事。如果你有一大堆垃圾留言需要删除,这种解决方案是非常有用的,但也可能删掉未经审核的有效评论。因此,如果你还没用上Akismet,马上安装它以阻止垃圾评论的骚扰。

    来源

    4、变更日志归属

    useful-wordpress-sql-hacks-04

    问题。WordPress安装完成之后会自动创建一个“admin”帐户。一些博客作者误将该帐号用于写作博文,后来才意识到这不是个人用户。

    方案。逐篇文章修改作者署名需要花费很多时间。令人高兴的是,SQL语句可以帮你搞定这一切:

    1. 登录phpMyAdmin,然后选择WordPress数据库。
    2. 首先,我们必须找到正确的用户ID。为此,打开SQL命令窗口,并执行以下命令:
      SELECT ID, display_name FROM wp_users;
    3. phpMyAdmin将显示一个与WordPress用户名相关联的用户ID列表。假设NEW_AUTHOR_ID是最近创建的作者ID,而OLD_AUTHOR_ID是原管理员帐户ID。
    4. 欲用NEW_AUTHOR_ID替换OLD_AUTHOR_ID,运行以下命令:
      UPDATE wp_posts 
      SET post_author = NEW_AUTHOR_ID 
      WHERE post_author = OLD_AUTHOR_ID;
    5. 这样一来,所有以前由admin用户撰写的文章,现在都转换到你所选择的新用户名下了。

    来源

  • 实用WordPress SQL语句集锦:第一章

    过去10年来,MySQL数据库以令人难以置信的速度在网络上流行起来。每一个WordPress博客都由MySQL数据库驱动,存储博客日志、设置、评论等内容。

    面对WordPress,虽然插件或编码技巧可以解决一些问题、完成某些任务,但是有时除了通过phpMyAdmin或SSH执行SQL语句外,你别无选择。下面让我们来看看WordPress实用SQL语句集锦。本系列文章的每个篇章都严格按照提出问题、解决问题、解释说明的思路撰写,以使读者真正了解掌握解决问题的方法,达到举一反三的效果。

    1、创建数据库备份

    useful-wordpress-sql-hacks-01

    问题。尽管本文论及的所有语句已经过测试,我们仍然应当先备份MySQL数据库,再尝试执行这些语句。

    方案。要手工创建一个WordPress数据库备份,请按照下列步骤进行:

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 接着在横向列示的菜单上点击“导出”按钮。
    3. 选择压缩方法(我个人习惯使用gzip),然后点击“执行”按钮。
    4. 浏览器会提示是否需要下载备份文件。选择“是”,然后将该文件储存在硬盘驱动器上。

    解释。需要注意的是,创建WordPress数据库备份的任务,可以通过WP-DB-Backup插件更容易地实现。每一个WordPress用户都应该安装此插件,并定期进行数据备份。(译注:此提示虽显絮叨却是博客作者都应遵循的准则。因为主题或插件没了都可以再安装,但数据没了那么所有过往的努力都将付诸东流。)

    2、批量删除日志修订记录

    useful-wordpress-sql-hacks-02

    问题。修订版本是WordPress 2.6引入的功能,该功能虽然在某些场景下比较有用,但也增加了MySQL数据库的大小。尽管我们可以手动删除文章修订版本,但这是非常漫长而枯燥的工作。

    方案。这个问题的解决方法很简单:我们通过执行简单的SQL查询来批量删除日志修订记录。如果你有很多的日志,其结果可能令人难以置信:数据库的大小将减少一半!

    1. 登录phpMyAdmin,选择WordPress数据库。
    2. 点击“SQL”按钮。将以下代码粘贴到SQL命令窗口:
      DELETE FROM wp_posts WHERE post_type = "revision";
    3. 大功告成。最终节省的数据库空间大小取决于博客文章数的多少。

    解释。wp_posts表有一个名为post_type的字段。此字段有几个取值,如“post”、“page”或“revision”。想要去除文章修订版本,只需运行一个命令以删除wp_posts表中,post_type字段等于“revision”的记录。

    来源

  • 『WordPress』博客搬迁更换域名的数据库操作

    博客更换域名涉及到后台数据库三个方面的记录更新:

    1. 站点域名设置,包括wp_options表中的home和siteurl两个字段;
    2. 文章内容中手工输入的域名更新,涉及wp_posts表的post_content字段;
    3. 文章链接更新,对应于wp_posts表的guid字段

    详细代码如下:

    UPDATE wp_options 
    SET option_value = replace(option_value,'old domain','new domain') 
    WHERE option_name = 'home' 
    OR option_name = 'siteurl';
    
    UPDATE wp_posts 
    SET post_content = replace(post_content,'old domain','new domain');
    
    UPDATE wp_posts 
    SET guid = replace(guid,'old domain','new domain');

    注意domain格式为 http://dengkefu.com 最后不要带”/”

  • Clean up Out-dated Custom Field Data in WordPress Post

    If you ever used a magazine-style theme, you must be familiar with the concept "custom field". In essence, it’s a key-value pair storing post data about what additional info to display in a specific page. In most cases, we take advantage of custom field to display an image related to the post.

    Problems We Have

    There are two major problems with this.

    Firstly, the name of the keys differ among various themes, as a result of which, some custom field data turn to be outmoded when you change the theme.

    Secondly, while a post is becoming out-dated as time goes, there’s little chance for that post to be displayed in any page at all. And the custom field data belonging to that post is getting redundant as well.

    Solutions We Get

    For the first question, the answer is in the following steps:

    Step 1: Go to WordPress admin page and edit whichever post contains that custom field key, then write down the name of the key. In the example below, it is "image".

    Step 2: Go to you phpMyAdmin page and choose the WordPress database from the left column, then click the SQL query window icon.

    Step 3: Type in following query string and "GO". That’s it. (Replace "image" with your key name.)

    # remove entries with "image" as key name
    DELETE FROM wp_postmeta WHERE meta_key = ‘image’

    For the second case, I’ll just provide a way of thinking, instead of a solid answer. For instance, I’ve got five posts with custom fields to show in a specific page, then I should keep the custom fields belonging to the latest five post, and delete the rest of them. A small change of the query string above will do just fine.

    # get the latest post_id
    SELECT @idMax := MAX(post_id) FROM wp_postmeta;
    # keep the latest five and remove the rest of them
    DELETE FROM wp_postmeta WHERE (@idMax – post_id > 5) AND meta_key = ‘image’

    NOTICE: Use the statements above at your own risk, because the value of post_id does not always increase normally.