WordPress双数据库使用、自定义数据插入及指定目录图片上传技术问询
问题一:WordPress中操作自定义数据库/多数据库的方法
1. 向自定义数据库表插入数据
在WordPress里,强烈推荐用内置的$wpdb类来操作数据库,避免直接写原生SQL带来的安全问题(比如SQL注入)。步骤如下:
- 第一步:确认自定义表存在:你需要先在数据库中创建好自定义数据表(可以通过phpMyAdmin手动创建,或者在插件激活时写代码自动创建)。
- 第二步:用
$wpdb->insert()插入数据:这个方法会自动处理数据转义,安全性拉满。
举个实际例子,假设你有一个名为wp_custom_profile的自定义表(前缀和你的WordPress一致),要插入用户的昵称和邮箱:
global $wpdb; $table_name = $wpdb->prefix . 'custom_profile'; // 自动匹配WordPress表前缀 // 准备要插入的数据 $data = array( 'nickname' => 'JohnDoe', 'email' => 'john@example.com', 'created_at' => current_time('mysql') // 用WordPress内置时间函数保证时区正确 ); // 定义数据类型,确保数据库存储格式正确 $format = array('%s', '%s', '%s'); // 执行插入操作 $insert_result = $wpdb->insert($table_name, $data, $format); // 检查插入结果 if ($insert_result) { echo '数据插入成功,新记录ID:' . $wpdb->insert_id; } else { echo '插入失败:' . $wpdb->last_error; }
2. 在同一WordPress站点使用两个数据库
如果需要同时操作WordPress默认数据库和另一个独立数据库,可以通过实例化新的wpdb对象来实现:
- 第一步:确保数据库用户有权限:要在数据库管理面板给当前WordPress的数据库用户授权,让它能访问第二个数据库。
- 第二步:新建
wpdb实例:传入第二个数据库的连接参数即可:
// 初始化第二个数据库的连接 $second_db = new wpdb( '你的第二个数据库用户名', '你的第二个数据库密码', '第二个数据库名称', 'localhost' // 数据库主机一般都是localhost ); // 检查连接是否成功 if ($second_db->connect_error) { die('无法连接到第二个数据库:' . $second_db->connect_error); } // 现在可以用$second_db操作第二个数据库了,比如查询数据 $results = $second_db->get_results("SELECT * FROM second_table"); // 插入数据同样用insert方法 $second_db->insert('second_table', array('name' => '测试数据'), array('%s'));
问题二:将图片上传到指定目录(回退到public_html下的ibank/login/nfs/uploads)
你的需求是跳过WordPress默认上传目录,直接把图片传到public_html/ibank/login/nfs/uploads,我帮你完善代码并梳理逻辑:
完整代码示例
// 处理图片上传请求 if (isset($_FILES["profile-picture"]) && $_FILES["profile-picture"]["error"] == UPLOAD_ERR_OK) { // 1. 构造目标目录路径:回退三级到public_html,再拼接目标子目录 // dirname(__FILE__, 3) 直接获取当前脚本向上三级的目录(即public_html) $base_dir = dirname(__FILE__, 3); $target_dir = $base_dir . '/ibank/login/nfs/uploads/'; // 2. 检查目标目录是否存在,不存在则自动创建(用WordPress内置函数处理权限) if (!wp_mkdir_p($target_dir)) { die('无法创建目标目录,请检查服务器权限'); } // 3. 生成唯一文件名,避免覆盖已有文件 $file_info = pathinfo($_FILES["profile-picture"]["name"]); $file_name = $file_info['filename'] . time() . '.' . $file_info['extension']; $target_file = $target_dir . $file_name; // 4. 把临时上传的文件移动到目标目录 if (move_uploaded_file($_FILES["profile-picture"]["tmp_name"], $target_file)) { echo '图片上传成功!路径:' . $target_file; // 这里可以把上传后的路径存入数据库,方便后续调用 } else { echo '文件移动失败,请检查目录写入权限'; } } else { echo '请选择有效的图片文件,或检查上传是否出错'; }
关键细节说明
dirname(__FILE__, 3):PHP 7.0+支持的语法,直接获取当前文件向上三级的目录,刚好对应你需要的public_html。如果你的PHP版本较低,可以替换为dirname(dirname(dirname(__FILE__)))。wp_mkdir_p():WordPress内置函数,比原生mkdir()更可靠,会自动递归创建目录并设置合适的权限,避免因为权限问题导致上传失败。- 唯一文件名:用
time()拼接原文件名,确保每个上传的文件都有唯一标识,不会覆盖已有文件。 - 错误处理:增加了对上传错误的判断(比如文件为空、上传失败等),方便调试排查问题。
内容的提问来源于stack exchange,提问作者Ramzan Ali
相关产品推荐
相关产品推荐

