在插件激活时创建存储过程

时间:2016-12-01 作者:vedu

我想知道,一旦插件被激活,是否可以启动存储过程

//action hook for plugin activation
register_activation_hook( __FILE__, \'my_func\' );

//function to create stored procedure
function my_func()
{
//code goes here to create a stored procedure
}
任何帮助都将不胜感激。非常感谢。

3 个回复
SO网友:TheDeadMedic

例如,假设您计划使用以下存储过程:

SELECT * FROM wp_posts
与其将其实际存储在MySQL中,不如创建一个PHP函数:

function {plugin_prefix}_get_posts() {
    global $wpdb;

    return $wpdb->get_results( "SELECT * FROM $wpdb->posts" );
}
现在,我们可以随时调用它:

$posts = {plugin_prefix}_get_posts();
// Away we go!
我故意使用无效的PHP来保存将来的复制粘贴程序-rename the function to something specific to your project!

SO网友:Mark Kaplun

是的,这是可能的,在插件激活时,您只需要通过php api调用相关的mysql查询,如手册中所述http://php.net/manual/en/mysqli.quickstart.stored-procedures.php, 并在停用时移除。

它聪明吗?我远非mysql大师,但似乎@thedeadmedic在做一些简单的事情,如选择方面是正确的。这些事情的性能取决于数据的复杂性,而通过减少请求的大小,您不会节省任何东西。只有当存储过程能够减少从DB到PHP的数据量时,它才具有优势。

在一般插件的上下文中,还有两件事需要记住。

存储过程对于数据库来说是全局的,对于特定的WP实例来说并不是唯一的,因此需要仔细编写,以避免与其他存储过程冲突,并避免从安全角度泄漏数据。

撰写此答案时,大约有7%的wordpress用户运行的mysql版本不支持他们(版本早于5.5)。

SO网友:Tyler Jones

只需在激活挂钩中使用$wpdb->query() 并确保前缀正确。

public static function activation_hook() {
    global $wpdb;
    $sql = "
    CREATE PROCEDURE {$wpdb->prefix}STORED_PROC_NAME(param1 varchar(16))
    RETURNS varchar(16)
    BEGIN
       --do your stored proc here
       RETURN param1
    END
    ";
    $wpdb->query($sql);

}

相关推荐

$wpdb->get_row返回什么?

由于插件中的调试和错误查找,我有一个简短的问题。$wpdb->;如果没有结果,返回get\\u row()?文件说明:(array|object|null|void) Database query result in format specified by $output or null on failure. 但当查看源代码时,它似乎返回了;null“;。。。如果您能快速提供帮助,我将不胜感激,我一直认为它会返回一个空数组,但我可能弄错了!