PHP与Mysql
要通过PHP连接到MySQL,需要为PHP脚本创建一个用户,以最少权限为原则,一般只需要给增删改查这几个权限
GRANT和REVOKE这两个可以授予或者取消MySQL用户的权限,权限分为四个等级:全局、数据库、表、列
GRANT命令格式
GRANT privileges [columns]权限列表
ON item权限所引用的库或者表
TO user_name [IDENTIFIED BY 'password']用户名可以被解释成[email protected],可以用此来区分用户从什么地方连接到
[REQUIRE ssl_options]
[WITH [GRANT OPTION | limit_options]]
用户权限类型:SELECT\INSERT\UPDATE\DELETE\INDEX\ALTER\CREATE\DROP
管理员权限:CREATE TEMPORARY TABLES\FILE\LOCK TABLES\PROCESS\RELOAD\REPLCATION CLIENT\REPLICATION SLAVE\SHOW DATABASES\SHUTDOWN\SUPER
特别权限:ALL(全部)\USAGE(只能登陆)
REVOKE命令
REVOKE privileges [(columns)]
ON item
FROM user_name
工作原理:
- 用户的浏览器发出一个HTTP请求,请求一个特定的Web页面,该搜索结果页面为a.php
- Web服务器接收到对a.php的请求之后,检索文件并传递给PHP引擎
- PHP引擎解析脚本,启动对MySQL服务器的连接并对服务器发送查询
- MySQL服务器接收到数据库查询的请求并查询,然后将查询结果返回给PHP引擎
- PHP引擎完成脚本运行后,将HTML返回给Web服务器
- Web服务器将HTML返回给客户端浏览器
以下是一个例子
从Web到数据库的步骤
- 检查并过滤
- 建立连接
- 查询数据库
- 获取查询结果
- 显示结果
以上面那个例子进行解释
检查并过滤
$searchterm = trim($_POST['searchterm']);
,trim()函数会过滤两端空白字符
magic_quotes_gpc
魔术引号开关,启用后将对post\get\sql进行转义处理,数据中心的单引号、双引号、反斜线与NULL等字符会被转义,这个配置在php.ini中可以进行设置
get_magic_quotes_gpc()
该函数的用处是检查magic_quotes_gpc是否开启,7.4版本后被废弃
$searchtype = addslashes($searchtype)
,addslashes()函数将对上面几种字符进行转义,如果magic_quotes_gpc已经被打开无需再使用,如果使用会造成双重转义,但是请注意,如果参数没有被单引号包裹,那么这个函数将不起作用
stripslashes()
,删除反斜杠
连接数据库
PHP在5.0版本的时候引进了mysqli,i表示改进,我们可以通过mysqli函数拓展来完成对数据库的操作
$db = new mysqli('servername','username','password','database');
最后的数据库名可以不加
查询数据库
使用$db->select_db(dbname)
或者mysqli_select_db(db_resouce,db_name)
来选择数据库
查询数据库:$restult = $db->query($query)
或者$result = mysqli_query($db,$query)
;
统计行数:mysqli_num_rows($result);
:可以知道结果的行数有多少,方便后面通过循环来取出里面的内容
与数据库断开连接
$result->free();
or
mysqli_free_result($result);
$db->close();
or
mysqli_close($db);
总览数据库操作
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 使用 sql 创建数据表
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "创建数据表错误: " . $conn->error;
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')";
if ($conn->multi_query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}//查询
$result = mysqli_query($con,"SELECT * FROM Persons
WHERE FirstName='Peter'");
while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}
$conn->close();
?>
评论已关闭