前端小白之每天学习记录----php(9)简单的api
首先了解跨表语句where( inner JOIN ),LEFT JOIN(左关联),RIGHT JOIN(右关联)
假设有两张表
表1:
category
cat_id cat_name parent_id
1 web开发 0
2 js 1
3 php 1
4 java 1
5 安卓开发 0
6 es6 2
表2:
article
arc_id title content cat_id
1 xx1 xx1 2
2 xx2 xx2 3
where( inner JOIN ):
两者同时满足: 两边的表数据 要同时匹配
SELECT * FROM article AS arc, category AS c WHERE arc.`cat_id` = c.`cat_id`
SELECT * FROM article AS arc INNER JOIN category c ON arc.`cat_id` = c.`cat_id`;
LEFT JOIN(左关联)
SELECT 字段名 FROM 左表 LEFT JOIN 右表 ON 左表.字段 = 右表.字段
以左表为基准, 哪怕左表中的记录/字段, 在右表中没有对应的数据,依然会把所有的左表数据
查询输出
RIGHT JOIN(右关联)
SELECT 字段名 FROM 左表 RIGHT JOIN 右表 ON 左表.字段 = 右表.字段
以右表为基准, 哪怕右表中的记录/字段, 在左表中没有对应的数据,依然会把所有的右表数据
查询输出
后台封装api,前端用ajax取数据
例子:
实现的功能:取出小说分类
需要的页面:
1.测试用表格
2.封装的数据库curd操作的页面(Mysql.class.php)
3.封装的分类小说表格curd操作页面(Category.class.php)
4.封装的api页面(category.php)
5.ajax调用html测试页面(index.php)
1.测试用表格(在数据库php_cs1)新建category表:
cat_id cat_name
1 玄幻小说
2 奇幻小说
3 都市小说
4 科幻小说
5 言情小说
2.封装的数据库curd操作的页面(Mysql.class.php)
<?php
class Mysql {
private $host; //主机名
private $dbName; //数据库名称
private $userName; //用户名
private $userPWd; //密码
public function __construct( $_host, $_dbName, $_userName, $_userPwd ){
$this->host = $_host;
$this->dbName = $_dbName;
$this->userName = $_userName;
$this->userPwd = $_userPwd;
if( !$this->connect() ){
die( mysql_error() );
}
//设置编码
$this->setCode();
//选择数据库
$this->selectDb();
}
public function connect(){
return mysql_connect( $this->host, $this->userName, $this->userPwd );
}
public function setCode(){
$this->query( "set names utf8" );
}
public function selectDb(){
mysql_select_db( $this->dbName );
}
public function query( $sql ){
return mysql_query( $sql );
}
//用来查询所有的数据
public function getAll( $sql ){
$res = $this->query( $sql );
$list = array();
while( $row = mysql_fetch_assoc( $res ) ){
// array_push( $list, $row );
$list[] = $row;
}
return $list;
}
//查询一行数据
public function getRow( $sql ){
$res = $this->query( $sql );
return mysql_fetch_assoc( $res );
}
//查询某一列
public function getCol( $sql ){
$res = $this->query( $sql );
$row = mysql_fetch_row( $res );
return $row[0];
}
//插入
public function add( $data, $tbName ){
$sql = "INSERT INTO {$tbName}("; //insert into message (
$sql .= implode( ',', array_keys( $data ) ) . " ) VALUES ( '";
$sql .= implode( "','", array_values( $data ) ) . "')";
// echo $sql;
return $this->query( $sql );
}
// UPDATE message SET title = 'hello', content = '你好' WHERE msg_id = 1
public function update( $data, $tbName, $condition ){
$sql = "UPDATE {$tbName} SET ";
foreach( $data as $k => $v ){
$sql .= $k . ' = ' . "'$v',";
}
// UPDATE message SET title = 'hello', content = '你好',
$sql = substr( $sql, 0, -1 );
$sql .= " " . $condition;
return $this->query( $sql );
}
}
$mysql = new Mysql( "localhost", "php_cs1", "root", "root" );
// $mysql->add() $mysql->update() $mysql->delete()...
?>
3.封装的分类小说表格curd操作页面(Category.class.php)
<?php
// require( "./Mysql.class.php" );
class Category {
//类中的属性叫成员变量
//类中的方法叫成员方法
private $tbName = 'category'; //表名
private $objLink = null;
public function __construct( $dbLink ){
$this->objLink = $dbLink;
}
public function getCategory( $catId ){ //根据分类id查询信息
//$catId 没传参或=0时查讯所有小说分类
if( empty( $catId ) )
return $this->objLink->getAll( "SELECT * FROM {$this->tbName}" );
else
return $this->objLink->getRow( "SELECT * FROM {$this->tbName} WHERE cat_id = {$catId}" );
}
public function addCategory( $data ){ //增加信息
if( $this->hasCategory( $data['cat_name'] ) ){
return false;
}else {
return $this->objLink->add( $data, $this->tbName );
}
}
public function hasCategory( $catName ){ //查询是否有分类名
$sql = "SELECT * FROM {$this->tbName} WHERE cat_name = '$catName'";
$res = $this->objLink->query( $sql );
return ( $res && mysql_num_rows( $res ) );
}
}
// $cat = new Category( $mysql );
// $catList = $cat->getCategory( 0 );
// $catList = $cat->getCategory( 1 );
// print_r( $catList );
// if( $cat->addCategory( array(
// 'cat_name' => '言情小说',
// ) ) ){
// echo 'ok';
// }else {
// echo 'error';
// }
?>
4.封装的api页面(category.php)
<?php
require( "./lib/Mysql.class.php" );//封装了数据库连接 数据的curd操作
require( "./lib/Category.class.php" );//封装了针对Category表的操作
$cat = new Category( $mysql );
$act = isset( $_REQUEST['act'] ) ? $_REQUEST['act'] : 'getAll'; //api:接收到的指令
$list = array();
switch( $act ){ //根据接收到的指令执行的动作
case 'getAll': //获取所有的分类
$list = $cat->getCategory( 0 );
echo json_encode( $list );//返回数据
break;
case 'add':
//添加分类
break;
}
?>
5.ajax调用html测试页面(index.php)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.bootcss.com/jquery/1.8.2/jquery.min.js"></script>
<script>
$(function(){
$.get("category.php", {act:'getAll'}, function( res ){ //ajax get 方法提交信息给api
var oUl = document.querySelector("header > nav > ul");
var obj = JSON.parse( res ); //处理返回的数据
var html = '';
for( var key in obj ){ //把数据遍历到li里面
html += "<li><a href='javascript:#'>" + obj[key]['cat_name'] + "</a></li>";
}
oUl.innerHTML = html;
} );
});
</script>
</head>
<body>
<header>
<nav>
<ul>
</ul>
</nav>
</header>
</body>
</html>

浙公网安备 33010602011771号