php如何链接数据库获取数据返回前端,简称php如何写接口。
如果你是php萌新,我建议你先去看一下 php如何链接数据库,这个文章,以便更好的了解,学习的更彻底!
首先了解一下跨域,通常我们这样解决:
header("Access-Control-Allow-Origin:*"); //跨域名
header("Access-Control-Allow-Headers:*"); //跨端口
这个看情况使用,他还有很多参数,这个自行百度一下,这些都是干货。
//格式,这个也很多,也百度一下
header("Content-type:text/html;charset=utf-8");
我们先封装一下代码,php是可以引入文件的,就是类似与vue那样的写法。
我们先建一个文件为:config.php(这个随意啊,不过通常都是这样)
//为什么要设置 $n=null,避免没有值报错
function db_infos($n = null)
{
/* 数据库主机名称 */
$db_host = '127.0.0.1';
/* 数据库用户帐号 */
$db_user = 'root';
/* 数据库用户密码 */
$db_passw = 'root';
/* 数据库具体名称 */
$db_name = 'root';
if ($n === 1) {
return $db_host;
}
if ($n === 2) {
return $db_user;
}
if ($n === 3) {
return $db_passw;
}
if ($n === 4) {
return $db_name;
}
};
/* 查询 */
//$sql就是数据库语句
function selects($sql = null)
{
if (!$sql) {
$conn = null;
exit;
}
$db_host = db_infos(1);
$db_user = db_infos(2);
$db_passw = db_infos(3);
$db_name = db_infos(4);
$conn = new PDO("mysql:host={$db_host};dbname={$db_name}", $db_user, $db_passw);
$conn->query("SET NAMES utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->query($sql);
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
$conn = null;
if (count($result) > 1) {
return $result;
} else {
if(count($result) > 0){
return $result;
}else{
return false;
}
}
}
/* 更新 */
function updates($sql = null)
{
if (!$sql) {
$conn = null;
exit;
}
$db_host = db_infos(1);
$db_user = db_infos(2);
$db_passw = db_infos(3);
$db_name = db_infos(4);
$conn = new PDO("mysql:host={$db_host};dbname={$db_name}", $db_user, $db_passw);
$conn->query("SET NAMES utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare($sql);
$res = $stmt->execute();
$conn = null;
return $res;
}
/* 插入 */
function inserts($sql = null)
{
if (!$sql) {
$conn = null;
exit;
}
$db_host = db_infos(1);
$db_user = db_infos(2);
$db_passw = db_infos(3);
$db_name = db_infos(4);
$conn = new PDO("mysql:host={$db_host};dbname={$db_name}", $db_user, $db_passw);
$conn->query("SET NAMES utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare($sql);
$res = $stmt->execute();
$conn = null;
return $res;
}
/* 删除 */
function deletes($sql)
{
if (!$sql) {
$conn = null;
exit;
}
$db_host = db_infos(1);
$db_user = db_infos(2);
$db_passw = db_infos(3);
$db_name = db_infos(4);
$conn = new PDO("mysql:host={$db_host};dbname={$db_name}", $db_user, $db_passw);
$conn->query("SET NAMES utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare($sql);
$res = $stmt->execute();
$conn = null;
return $res;
}
特别注意一下 $stmt = $conn->prepare($sql); 查询使用query其他的使用prepare,如果其他的使用query就会报错。
简单的封装了一下,我们接下来讲讲怎么使用
如,在index.php中引入,这个时候就可以调用方法了。
include './config.php';
echo selects("SELECT * FROM user WHERE id=1");
现在我们会了操作数据库了,这个时候还不能算是接口,要能获取和返回才能算是接口,现在我们来看看怎么获取前端的参数:
$data = file_get_contents('php://input');
//格式化一下
$d = json_decode($data);
//获取前端的传递过来的参数,如id
$id = $d->id;
//假如我们需要搜索user表里面id为1的用户
echo selects("SELECT * FROM user WHERE id='{$id}'");
前端ajax、axios等需要设置headers:
headers: {
"Content-type": "application/json; charset=utf-8"
},
到了这里基本是可以算是能写接口了,但是这是不够的,有个很重要的是,数据库语句你要会呀,不会,会php也没用,所以赶紧去学习一下数据库语句。
我们简单的教大家几句数据库语句,包含了,增、删、改、查的一些基本语句:
//查询user表所有
SELECT * FROM user
//查询user表id为1的
SELECT * FROM user WHERE id=1
//修改user表id为1用户的name
UPDATE user SET name='你好' WHERE id='1'
//user插入
INSERT INTO user(name) VALUES('你好2')
//删除
DELETE FROM user WHERE id='1'
知道了写数据库语句,那么基本的都可以应付过来,大家可以尝试的做个简单的博客来试试。