laravel学习并连接mysql数据库
- 下载laravel
laravel下载地址 - phpstudy_pro\WWW\laravel.env文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=clgl //你的数据库名称
DB_USERNAME=root //你的账号
DB_PASSWORD=root //你的密码
- 修改phpstudy_pro\WWW\laravel\config\cors.php文件,允许前端访问
<?phpreturn ['paths' => ['api/*', 'sanctum/csrf-cookie'],'allowed_methods' => ['*'],'allowed_origins' => ['http://localhost:5173', 'http://127.0.0.1:5173'], // Vue 的地址'allowed_origins_patterns' => [],'allowed_headers' => ['*'],'exposed_headers' => [],'max_age' => 0,'supports_credentials' => true, // 如果需要携带 cookie
];
- 修改phpstudy_pro\WWW\laravel\app\Http\Kernel.php文件
protected $middlewareGroups = ['web' => [\App\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,\App\Http\Middleware\VerifyCsrfToken::class,\Illuminate\Routing\Middleware\SubstituteBindings::class,],'api' => [// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,'throttle:api',\Illuminate\Routing\Middleware\SubstituteBindings::class,\Fruitcake\Cors\HandleCors::class, //确保中间件已启用 确保这一行存在],];
- 在数据表中增加一个表
- 写两个方法getQuestion和updateUsername,一个属于get请求一个属于post请求
<?php
namespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;class QuestionController extends Controller
{public function getQuestion(Request $request){// 1. 只允许 POST 请求if ($request->method() !== 'GET') {return response()->json(['status' => '405','status_message' => 'Method Not Allowed','content' => []], 405);}// 2. 获取 POST 参数$username = $request->input('username');// 3. 验证参数是否为空if (empty($username)) {return response()->json(['status' => '400','status_message' => 'Username is required','content' => []], 400);}// 4. 建立数据库连接// DB::select("SELECT * FROM question WHERE username = '$username'");$conn = mysqli_connect("127.0.0.1", "root", "root", "clgl");if (!$conn) {return response()->json(['status' => '500','status_message' => 'Database connection failed','content' => []], 500);}// 5. 设置字符集mysqli_query($conn, "SET NAMES utf8");// 6. 转义输入(防止 SQL 注入)$username = mysqli_real_escape_string($conn, $username);$sql = "SELECT * FROM question WHERE username = '$username'";$result = mysqli_query($conn, $sql);if (!$result) {mysqli_close($conn);return response()->json(['status' => '500','status_message' => 'SQL Error: ' . mysqli_error($conn),'content' => []], 500);}$data = mysqli_fetch_assoc($result);// 7. 返回 JSON 响应(使用 return 而不是 echo)if (empty($data)) {return response()->json(['status' => '404','status_message' => 'NO DATA FOUND','content' => []], 404);} else {return response()->json(['status' => '200','status_message' => 'success','content' => $data], 200);}// 8. 关闭连接(实际在 return 后不会执行,但逻辑上应确保关闭)mysqli_close($conn);}/*** 修改 username 的 POST 方法*/public function updateUsername(Request $request){// 1. 只允许 POST 请求if ($request->method() !== 'POST') {return response()->json(['status' => '405','status_message' => 'Method Not Allowed','content' => []], 405);}// 2. 获取 POST 参数:old_username 和 new_username$oldUsername = $request->input('old_username');$newUsername = $request->input('new_username');// 3. 验证参数是否为空if (empty($oldUsername) || empty($newUsername)) {return response()->json(['status' => '400','status_message' => 'old_username 和 new_username 是必填参数','content' => []], 400);}// 4. 使用 Laravel DB 门面更新数据(推荐方式)try {$affected = DB::table('question')->where('username', $oldUsername)->update(['username' => $newUsername]);if ($affected === 0) {return response()->json(['status' => '404','status_message' => '未找到匹配的记录,更新失败','content' => []], 404);}return response()->json(['status' => '200','status_message' => '用户名更新成功','content' => ['old_username' => $oldUsername,'new_username' => $newUsername]], 200);} catch (\Exception $e) {return response()->json(['status' => '500','status_message' => '数据库错误: ' . $e->getMessage(),'content' => []], 500);}}
}
- 下载phpstudy,启动Apache和Mysql
- 设置访问位置
- 输入http://localhost即可访问到laravel界面,即为配置成功;随后在地址中输入http://localhost/getQuestion?username=小红 ;可以访问到本地数据库中的数据
10. 启动本地的vue项目尝试连接一下,测试是否存在跨域,以及post接口是否可以访问
(未完待续)