刚从python转来做php,目前在学习laravel框架,新项目准备基于laravel框架的前后端分离模式。
这次练习,需要两个文件,分别是index.html,index.php。
index.html做为前端静态页面,通过ajax做数据请求,这么做是为了复习一下ajax的写法。
index.html
<!doctype html>
<head>
<!--不写这句,页面无法解析中文字符-->
<meta charset="UTF-8">
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<title>CHUENG</title>
</head>
<body>
<a id="code">点击向后端发送请求!</a>
</body>
<script type="text/javascript">
$('#code').click(function () {
$.ajax({
url: '/php-study/index.php',
type: 'get',
data: {
<!--通过修改action的value值,来访问后端index.php不同的方法-->
action: 'check',
dbname: 'phpstudy',
<!--发送查询语句-->
query: "SELECT * FROM user;",
<!--发送插入语句-->
insert: "INSERT INTO user (id, username) VALUES(0, 'monkey');"
},
success: function (resp) {
$('body').html(resp);
}
})
})
</script>
</html>
index.php
<?php
class PdoDB
{
private $servername = 'localhost';
private $username = 'root';
private $password = 'root';
private $dbname = 'edu';
private static $_instance = NULL;
// 设为私有方法后,不能通过new来创建实例对象了,只能由内部提供静态方法来调用
private function __construct()
{
try {
$this->conn = new PDO(
"mysql:host=$this->servername;dbname=$this->dbname;",
$this->username,
$this->password
);
// 设置 PDO 错误模式为异常
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
$e->getMessage();
}
}
// 由这个函数来new一个类的实例,进而实现单例需求.
public static function getInstance()
{
if (is_null(self::$_instance)) {
self::$_instance = new PdoDB();
}
return self::$_instance;
}
public function __clone()
{
die('Clone is not allowed.' . E_USER_ERROR);
}
// 程序结束后自动调用该函数,这里不设置成私有方法,是为了让实例自行调用.
public function __destruct()
{
$this->conn = NULL;
}
// 创建数据库
public function create($data)
{
try {
$sql = "CREATE DATABASE $data ;";
// 使用 exec() ,没有结果返回
$this->conn->exec($sql);
echo $data . '数据库创建成功!';
} catch (PDOException $e) {
echo $sql . '<br>' . $e->getMessage();
}
}
// 查询数据库
public function check($data)
{
try {
$result = $this->conn->query($data)->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
//var_dump($result);
$result_json = json_encode($result);
echo $result_json;
}
catch (PDOException $e) {
echo $data . '<br>' . $e->getMessage();
}
}
public function insert($data)
{
try {
$result = $this->conn->exec($data);
echo $result;
} catch (PDOException $e) {
echo $data . '<br>' . $e->getMessage();
}
}
}
$db = PdoDB::getInstance();
switch ($_GET['action']) {
case 'connect':
echo '数据库连接成功!';
break;
case 'create':
$db->create($_GET['dbname']);
break;
case 'check':
$db->check($_GET['query']);
break;
case 'insert':
$db->insert($_GET['insert']);
break;
default:
break;
}