前语:去年参加的大学生创新创业训练计划,项目是班务管理微信小程序开发,(大一时候我学的数据库是MySQL)所以有一些数据需要通过小程序录入并且保存到数据库,完成开发后,写一篇关于微信小程序PHP交互博客。
环境准备:
- LNMP(Linux、NGINX、MySQL、PHP)
- 备案过的域名——如果仅仅测试用可以在微信开发者工具勾选“不检验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书”。
举个例子:实现简单登录操作。
login.js(部分)
/**
* 登录按钮实现
*/
loginHandle: function(){
console.log('输入的账号'+this.data.username)
console.log('输入的密码'+this.data.password)
wx.request({
url: 'https://个人域名/WeChatConnect/login.php',
method:'post',
data:{
username:this.data.username, //发送的数据,成功就写入存储
password:this.data.password
},
header:{
"Content-Type": "application/x-www-form-urlencoded"
},
/**
* 获取数据库成功
*/
success:function(res){
console.log('获取数据库密码'+res.data)
if (res.data != null && res.data != "无法匹配!"){
wx.showToast({
title: '登录成功',
duration: 2000
}),
wx.setStorageSync('loginUser', res.data.username)
wx.setStorageSync('realname', res.data.realname)
wx.switchTab({
url: '/pages/mine/mine',
})
} else{
wx.showModal({
title: '错误',
content: '密码验证失败\r\n请检查账号密码后重试',
showCancel: true
})
}
},
})
}
解释一下,我们这里使用的是微信小程序的wx.request方法来向PHP接口调起请求,然后设置头部信息(header);方法使用POST,之所以用post方法传输是因为post方法在传输的时候浏览器地址栏不会显示传输的参数信息,但是get会;data部分就传两个参数——用户名跟密码。
connect.php
<?php
header("Content-type: text/html; charset=utf8");
//1. 声明字符编码
$host='127.0.0.1';//数据库ip,这PHP文件是存服务器,所以本机ip就行了,其他服务器就填真实ip
$user='ILoveLinkinPark';//用户名,自己实际情况设置
$password='ILoveLinkinPark';//密码,自己实际情况设置
$dbName='WXDatabase';//要连接的数据库名
$con =new mysqli($host,$user,$password,$dbName);//数据库连接
/*
if (!$con) {
echo "系统异常,连接数据库失败";
}*/
?>
这里的连接文件是在和数据库同一个机器,所以是127.0.0.1回环地址。如果是其他服务器,填写其他服务器的ip地址,并且记得开启访问权限。
login.php
<?php
include 'connect.php';//调用connect.php文件
$username=$_POST["username"];//接收js传过来的参数
$password=$_POST["password"];
if ($con->connect_error){//判断数据库连接是否正常
die("连接失败:".$con->connect_error);
}else {
$sql="select * from user where username='$username'and password='$password';";//根据传入的参数查询数据库中的数据
$res=$con->query($sql);
$data=$res->fetch_array(PDO::FETCH_LAZY);
if (json_encode($data["password"]) == '"'.$password.'"') { //json_encode($data["password"]) == "'"+$password+"'"
// code...
echo((json_encode($data)));
}
else{
// echo((json_encode($data)));
echo("无法匹配!");
}
}
?>
首先是引用connect.php文件,然后获取微信小程序js传的参数——用户名和密码,判断连接正常之后,我们再执行MySQL里面的SQL语句,进行查询。
SELECT * FROM 表名 WHERE username = '$username' AND password = '$password';
如果账号密码都正确,就返回查询得到的数据小程序端——包括数据库的记录真实姓名(realname)。
这里是简单的例子,如果看不懂,或者需要源码可以私聊我,经常在线。