上一节已经成功配置了php+mysql开发环境(https://mp.csdn.net/mp_blog/creation/editor/129432310),下面将进行实战连接数据库
一,打开sublime3编辑器,配置php开发环境
1.1 在网站根目录下新建php项目文件夹,存放php文件
1.2 安装Package Control,按下ctrl+shift+p,调出输入框输入Package Control,并安装
安装成功后可以用package control添加其它支持插件
二,php连接数据库相关源码
2.1 数据库配置
2.2 连接数据库和用户的增删改查
connect();
}
// destructor
function __destruct()
{
}
// Connecting to database
public function connect() {
// 创建连接
$this->conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD);
// 检测连接
if ($this->conn->connect_error) {
$this->isNext=false;
}else{
//检查是否创建数据库
// 创建数据库
$sql = "show DATABASES LIKE '".DB_DATABASE."'";
$row = $this->conn->query($sql)->fetch_object();
if ($row) {
$this->isNext=true;
} else {
// 创建数据库
$sql = "CREATE DATABASE ".DB_DATABASE;
if ($this->conn->query($sql) === TRUE) {
$this->isNext=true;
} else {
$this->isNext=false;
}
}
}
if($this->isNext){
$this->conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if ($this->conn->connect_error) {
$response["code"] = "0";
$response["msg"] = "连接失败";
die(json_encode($response,JSON_UNESCAPED_UNICODE));
}
// else{
// $response["code"] = "0";
// $response["msg"] = "连接成功";
// die(json_encode($response,JSON_UNESCAPED_UNICODE));
// }
}else{
$response["code"] = "0";
$response["msg"] = "创建数据库失败";
die(json_encode($response,JSON_UNESCAPED_UNICODE));
}
// return database handler
return $this->conn;
}
public function checkTablesUsers()
{
$sql = "SHOW TABLES LIKE 'users'";
$row = $this->conn->query($sql)->fetch_object();
if (!$row) {
// 使用 sql 创建数据表
$sql = "CREATE TABLE users (
uid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50),
avatar VARCHAR(50),
sign VARCHAR(50),
createtime DATETIME
)";
if ($this->conn->query($sql) === TRUE) {
return true;
} else {
$response["code"] = "0";
$response["msg"] = "创建数据表错误: " .$this->conn->error;
die(json_encode($response,JSON_UNESCAPED_UNICODE));
return false;
}
} else {
return true;
}
}
/**
* Storing new user
* returns user details
*/
public function storeUser($username, $password)
{
if ($this->checkTablesUsers()) {
$stmt = $this->conn->prepare("INSERT INTO users(username, password,createtime) VALUES(?, ?, NOW())");
//该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串
$stmt->bind_param("ss", $username, $password);
$result = $stmt->execute();
$stmt->close();
// check for successful store
if ($result) {
$stmt = $this->conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
return $user;
} else {
return false;
}
}
}
/**
* Get user by username and password
*/
public function getUserByUsernameAndPassword($username, $password)
{
if ($this->checkTablesUsers()) {
$stmt = $this->conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
if ($stmt->execute()) {
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
// verifying user password
$passwordss = $user['password'];
// check for password equality
if ($passwordss == $password) {
// user authentication details are correct
return $user;
}
} else {
return NULL;
}
}
}
/**
* Get user by uid
*/
public function getUserByUid($uid)
{
if ($this->checkTablesUsers()) {
$stmt = $this->conn->prepare("SELECT * FROM users WHERE uid = ?");
$stmt->bind_param("s", $uid);
if ($stmt->execute()) {
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
return $user;
} else {
return NULL;
}
}
}
/**
* Check user is existed or not
*/
public function isUserExisted($username)
{
if ($this->checkTablesUsers()) {
$stmt = $this->conn->prepare("SELECT username from users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
// user existed
$stmt->close();
return true;
} else {
// user not existed
$stmt->close();
return false;
}
}
}
}
2.3 POST JSON数据请求接口格式注册实战
username;
$password=$data->password;
}
if($username&&$password){
// check if user already existed
if ($db->isUserExisted($username)) {
// exists already
$response["code"] = "0";
$response["msg"] = "用户已存在";
echo json_encode($response,JSON_UNESCAPED_UNICODE);
} else {
// create a new user
$user = $db->storeUser($username, $password);
if ($user) {
$response["code"] = "1";
$response["msg"] = "注册成功";
$response["data"]["uid"] = $user["uid"];
$response["data"]["username"] = $user["username"];
echo json_encode($response,JSON_UNESCAPED_UNICODE);
} else {
//failed
$response["code"] = "0";
$response["msg"] = "注册失败";
echo json_encode($response,JSON_UNESCAPED_UNICODE);
}
}
} else {
$response["code"] = "0";
$response["msg"] = "请输入用户名或密码";
echo json_encode($response,JSON_UNESCAPED_UNICODE);
}
2.4 POST JSON数据请求接口格式登录实战
username;
$password=$data->password;
}
if($username&&$password){
$user = $db->getUserByUsernameAndPassword($username, $password);
if ($user) {
//user found
$response["code"] = "1";
$response["msg"] = "登录成功";
$response["data"]["uid"] = $user["uid"];
$response["data"]["username"] = $user["username"];
echo json_encode($response,JSON_UNESCAPED_UNICODE);
} else {
// user not found
$response["code"] = "0";
$response["msg"] = "用户名或密不正确";
echo json_encode($response,JSON_UNESCAPED_UNICODE);
}
} else {
// params missing
$response["code"] = "0";
$response["msg"] = "请输入用户名或密码";
echo json_encode($response,JSON_UNESCAPED_UNICODE);
}
2.5 GET方式接口获取用户信息实战
getUserByUid($uid);
if ($user) {
//user found
$response["code"] = "1";
$response["msg"] = "获取用户信息成功";
$response["data"]["uid"] = $user["uid"];
$response["data"]["username"] = $user["username"];
echo json_encode($response,JSON_UNESCAPED_UNICODE);
} else {
// user not found
$response["code"] = "0";
$response["msg"] = "获取用户信息失败";
echo json_encode($response,JSON_UNESCAPED_UNICODE);
}
} else {
// params missing
$response["code"] = "0";
$response["msg"] = "请传入用户ID";
echo json_encode($response,JSON_UNESCAPED_UNICODE);
}
三,运行
打开静态页面,输入用户名密码,登录成功会返回首页
四,编辑器
4.1 当然除了sublime,还有phpstorm和EclipseForPHP也是很强大的编辑器可供选择,sublime轻量级一些
4.2 sublime插件
1.Package Control (https://sublime.wbond.net)
这个就不多说了,装sublime插件必备,如果你还没有装,看这里。
2.SublimeCodeIntel (https://github.com/SublimeCodeIntel/SublimeCodeIntel)
提供代码提示,函数、对象或变量名称等。还可以提示对象或类中哪些方法和变量。基于komodo codeintel开发,虽然有时会有一些问题,但是大多时候是没问题的。
3.SublimeLinter (https://sublime.wbond.net/packages/SublimeLinter)
代码提错工具。但是从sublime 3开始,SublimeLineter编程模块化,所以安装完主安装包之后,还需要安装你需要支持的对应的语言的插件。对于PHP+js的开发,可以安装如下插件:
SublimeLinter-php
SublimeLinter-jshint
SublimeLinter-json
and SublimeLinter-csslint
4.SideBarEnhancements (https://sublime.wbond.net/packages/SideBarEnhancements)提供强大的边栏右键选项,非常方便。
5.VCS Gutter (https://sublime.wbond.net/packages/VCS%20Gutter)
编码的时候避免不了使用Git或SVN,VCS Gutter可以很方便的在代码中显示代码改动,支持Git、 Mercurial和 Subversion,如下图:screenshot
6.SFTP, paid (http://wbond.net/sublime_packages/sftp)
这个插件可以让Sublime很方便的支持SFTP、FTP和FTPS。支持远程文件浏览编辑和远程与本地的同步,还可以方便的上传下载,不过要钱,我就呵呵呵了~~~。
7.Tortoise (on Windows only) (http://wbond.net/sublime_packages/tortoise)
如果在Windows环境下编程,这个工具可以完全替代SideBarGit,它没有很多的特点,但是提供的功能都很实用。
8.sublime-github (https://github.com/bgreenlee/sublime-github)
支持github的插件。
9.PHPcs (http://soulbroken.co.uk/code/sublimephpcs)
检查php代码是否满足某种标准,比如Zend,PEAR等。
10.TrailingSpaces (https://github.com/SublimeText/TrailingSpaces)
自动删除高亮行末、文件尾的空格。
11.BracketHighlighter (https://github.com/facelessuser/BracketHighlighter)
和Tag插件的情形一样,ST3对代码高亮已经支持的足够好了,但是不得不说,这仍然是一个很好的插件。
12.Sublime Function Name Display (https://github.com/akrabat/SublimeFunctionNameDisplay)
在底部状态栏显示当前文件、类和函数或方法的名称。简单实用。
13.Terminal (http://wbond.net/sublime_packages/terminal)
使用Git或者一些PEAR包的时候,你或许需要不断地转换到命令行。这就是这个插件的作用。
14.DocBlockr (https://github.com/spadgos/sublime-jsdocs)