我正在创建一个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 :(得分: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;
中。
以下是示例和类引用:
答案 1 :(得分: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]);
因此,要解决此特定问题,此解决方案可行。对不起,我忘了提到使用外部数据库。这是我遗漏的一个重要问题。谢谢大家的意见。
答案 2 :(得分:-1)
函数database()
返回数据库名称 - http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_database -
所以你可以先运行SELECT DATABASE();
来获取数据库名称。