windows 环境下mysql的操作
一,MYSQL 的连接
在下载安装好mysql后,访问数据控之前我们需要先连接数据库:
建立一个connect.php 的文件:
(面向过程)
<?php
header('Content-type: text/html; charset=utf-8');
$host = "localhost";
$username = "root";
$password = "root";
// 创建连接
$conn = mysqli_connect($host, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}else{
echo "连接成功";
}
mysqli_set_charset($conn,'utf-8');
?>
连接特定的数据库:(连接名为mybase 的数据库)
注释: mybase数据库是已经建好的,数据库名字不分大小写
<?php
header('Content-type: text/html; charset=utf-8');
$host = "localhost";
$username = "root";
$password = "root";
$dbname = "myb";
// 创建连接
$conn = mysqli_connect($host, $username, $password,$dbname);
// 检测连接
if (mysqli_connect_errno($conn)) {
die("Connection failed: " . mysqli_connect_error($conn));
}else{
echo '连接成功';
}
mysqli_set_charset($conn,'utf-8');
。windows中 默认的username 是root 密码也是root
。header(‘Content-type: text/html; charset=utf-8’);
mysqli_set_charset($conn,‘utf-8’); 这两句是将格式设置为utf-8
简写形式:
<?php
header('Content-type: text/html; charset=utf-8');
// 创建连接
$conn = mysqli_connect("localhost", "root", "root", "mybase" );
// 检测连接
if (mysqli_connect_erron($conn)){
echo "链接失败" . mysqli_connect_error();
}
mysqli_set_charset($conn,'utf-8');
二 建立数据库
前面已经连接成功时,可以创建自己的数据库。
创建一个名为 mybse 的数据库
脚本文件命名为 create_dbase.php:
(面向过程)
<?php
require 'connect.php'; //刚才已经创建了连接数据库的脚本,所以这里直接引用即可
//创建数据库
$sql = "CREATE DATABASE mybase";
if (mysqli_query($conn, $sql)) {
echo "数据库创建成功";
} else {
echo "Error creating database: " . mysqli_error($conn);
}
mysqli_close($conn); // 关闭数据库,必不可少!
?>
三,建立数据库的数据表
创建好名为 mybase 的数据库之后 ,现在在数据库中建立表
(面向过程)
建立 create_table.php :
<?php
require 'connect.php';//连接数据库
//创建数据表
$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 (mysqli_query($conn, $sql)) {
echo "数据表 MyGuests 创建成功";
} else {
echo "创建数据表错误: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
NOT NULL - 每一行都必须含有值(不能为空),null 值是不允许的。
DEFAULT value - 设置默认值
UNSIGNED - 使用无符号数值类型,0 及正数
AUTO INCREMENT - 设置 MySQL 字段的值在新增记录时每次自动增长 1
PRIMARY KEY - 设置数据表中每条记录的唯一标识。 通常列的 primary key 设置为 ID 数值,与 AUTO_INCREMENT 一起使用。
四,插入数据
建立好数据表后 ,像数据表中插入数据
(面向过程)
建立 insert.php
插入单条数据:
<?php
require 'connect.php';
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if (mysqli_query($conn, $sql)) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
插入多条数据:
<?php
require 'connect.php';
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('luo', 'Doe', 'jlio@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";
if (mysqli_multi_query($conn, $sql)) {
echo "新记录插入成功33";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
运用预处理插入多条数据
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
1,预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?” 标记 。例如:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
2,数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
3,执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
(面向对象)代码如下:
<?php
$host = "localhost";
$username = "root";
$password = "root";
$dbname = "mybase";
// 创建连接
$conn = new mysqli($host, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "新记录插入成功";
$stmt->close();
$conn->close();
?>
解析以下实例的每行代码:
“INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)”
在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。
接下来,让我们来看下 bind_param() 函数:
$stmt->bind_param(“sss”, $firstname, $lastname, $email);
该函数绑定了 SQL 的参数,且告诉数据库参数的值。 “sss” 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。
参数有以下四种类型:
i - integer(整型)
d - double(双精度浮点型)
s - string(字符串)
b - BLOB(binary large object:二进制大对象)
五,读取数据库数据
建立 read.php
(面向过程)
<?php
require 'connect.php';
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// 输出数据
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
mysqli_close($conn);
有条件的读取数据库
WHERE 子句用于过滤记录。
<?php
require 'connect.php';
$result = mysqli_query($con,"SELECT * FROM Persons
WHERE FirstName='Peter'");
while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}
?>
上述代码 要求显示 firstname = ‘Peter’ 的数据
六,根据特定条件对数据进行排序
ORDER BY 关键词用于对记录集中的数据进行排序。
ORDER BY 关键词默认对记录进行升序排序。
如果你想降序排序,请使用 DESC 关键字。
建立 sort.php
下面的实例选取 “Persons” 表中存储的所有数据,并根据 “Age” 列对结果进行排序:
(面向对象)
<?php
require ‘connect.php’
$result = mysqli_query($con,"SELECT * FROM Persons ORDER BY age");
while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br>";
}
mysqli_close($con);
?>
七,更新(修改)数据库
UPDATE 语句用于更新数据库表中已存在的记录
。
注释:请注意 UPDATE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要更新。如果您想省去 WHERE 子句,所有的记录都会被更新!
建立 updata.php
<?php
require ‘connect.php’
mysqli_query($con,"UPDATE Persons SET Age=36
WHERE FirstName='Peter' AND LastName='Griffin'");
mysqli_close($con);
?>
本例将 firstname = ‘Petet’ ,lastname =‘Griffin’ 的Age 改为了36
八,删除数据
DELETE FROM 语句用于从数据库表中删除记录。
建立 dalete.php
<?php
require ‘connect.php’;
mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'");
mysqli_close($con);
?>
删除了 lastname =‘Griffin’ 的数据条。