2015-06-22 41 views
0

我正在做一个WordPress插件,我需要在查询中更新当前数据库的表。但是,我不需要将数据库名写入sql,而需要某种方式在查询中选择它,这样无论数据库名是什么,它都可以工作。这是我目前拥有的代码:更新当前数据库表

$stmt = $conn->prepare("UPDATE `wp_plugin_development` . `wp_users` SET `user_pass` = ? WHERE `user_login` = ?") or trigger_error($mysqli->error); 
$stmt->bind_param('ss', $user_password[$i], $user_login[$i]); 

wp_plugin_development是我目前的数据库名称,也需要与选择的数据库名称的一些其他的方式来替代。我希望我可以写一些像UPDATE SELECT DATABASE()但这显然不起作用。也许有一个完全不同的方式来编码?我仍然认为自己是新手,所以如果我错过了某些明显的事情,我很抱歉。任何帮助是极大的赞赏。

+0

数据库名称已经在wp-config.php文件中指定了吗?如果连接到数据库,则可以运行语句来操作表。此时数据库的名称并不重要。更新wp_users ...应该工作 – claydwg

+0

@claydwg我应该多解释一下。这段代码正在做的是从一个数据库(在'conn'中定义)获取哈希密码并将它们复制到当前数据库('wp_plugin_development')。那么当我从这个查询中删除数据库名称时会发生什么,它会为用户创建新的密码,这是我不想要的。这就是为什么我需要包含一些获取当前数据库名称的方法。 –

回答

-1

函数database()返回数据库名称 - http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_database- ,因此您可以先运行SELECT DATABASE();以获取数据库名称。

+0

我得坦白说,我不知道如何写这个,以便它能与我正在进行的'$ stmt'事情一起工作。 –

+0

WordPress的编码是严格禁止使用本机的东西。如果它不符合WP指南,甚至有机制阻止你的插件/主题。 – DanFromGermany

+0

啊,好的。我专注于MySQL的部分问题,并不知道WP的限制。 –

1

您不需要当前数据库名称,因为连接已与当前数据库建立。 你需要表名!前缀在设置WordPress时设置。你的需要的前缀,因为每个安装都不一样。

正确的WordPress的方法是这样的:

global $wpdb; 
$table_name = $wpdb->prefix . 'plugin_development'; 

前缀存储(wp_)。在WP中;您不直接使用PDO或MySqli,您可以使用全局对象$wpdb

$wpdb->update($table_name, $data, $where, $format = null, $where_format = null); 

如果您确实需要数据库名称,它将存储在$wpdb->dbname;中。 下面是实施例和类引用:

https://codex.wordpress.org/Class_Reference/wpdb

+0

我使用WordPress的框架,我发现它很方便,但在某些情况下我没有看到任何解决方案。或者有时我在相同的循环或条件中使用一些。例如,在我发布的代码中,我将所有用户的哈希密码从一个数据库中取出,并将它们应用到当前数据库(已具有相同用户)。为了使用WordPress框架来做到这一点,我必须在其中一个配置文件中关闭密码散列(或者它会“重复”),这是一个很大的安全风险。所以我选择使用mysqli查询来代替。 –

+1

虽然你的回答确实有助于我思考我的方法。 '$ conn'是与其他数据库的连接。因此,我使用'$ wpdb'与当前数据库建立了一个新的连接,名为'$ this_db',并将$ stmt连接改为使用'$ this_db'。 它的工作原理就像我想要的那样。 –

0

我用另一个数据库作为连接方法(这是在$conn变量定义)。因此,我使用$wpdb与当前数据库建立了新连接,并将其命名为$this_db。现在,我不必在查询中指定数据库名称,它可以像我想要的那样工作。为了获得更好的背景下,这是我添加的代码/变更:

$thisServername = $wpdb->dbhost; 
$thisUsername = $wpdb->dbuser; 
$thisPassword = $wpdb->dbpassword; 
$thisDBname = $wpdb->dbname; 

$this_db = new mysqli($thisServername, $thisUsername, $thisPassword, $thisDBname); 

$stmt = $this_db->prepare("UPDATE `wp_users` SET `user_pass` = ? WHERE `user_login` = ?") or trigger_error($mysqli->error); 
$stmt->bind_param('ss', $user_password[$i], $user_login[$i]); 

因此,为解决这一具体问题,这个解决方案的工作。对不起,我忘了提及使用外部数据库。这是我无法解决的重要问题。并感谢大家的意见。