1、MySQL是什么
-
MySQL 是一种在 Web 上使用的数据库系统。
-
MySQL 是一种在服务器上运行的数据库系统。
-
MySQL 不管在小型还是大型应用程序中,都是理想的选择。
-
MySQL 是非常快速,可靠,且易于使用的。
-
MySQL 支持标准的 SQL。
-
MySQL 在一些平台上编译。
-
MySQL 是免费下载使用的。
-
MySQL 是由 Oracle 公司开发、发布和支持的。
-
MySQL 是以公司创始人 Monty Widenius's daughter: My 命名的。
MySQL 中的数据存储在表中。表格是一个相关数据的集合,它包含了列和行。
在分类存储信息时,数据库非常有用。一个公司的数据库可能拥有以下表:
-
Employees
-
Products
-
Customers
-
Orders
MySQL数据库的安装 http://www.mysql.com
2、连接数据库
连接数据库的方法有3种
- MySQLi (面向对象)
- MySQLi (面向过程)
- PDO
PDO的安装http://php.net/manual/en/pdo.installation.php
<?php
$servername = "localhost";//主机名
$username = "root"; //用户名
$password = "123456"; //密码
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
注意:
*当你创建一个新的数据库时,你必须为 mysqli 对象指定三个参数 (servername, username 和 password)。
*如果你使用其他端口(默认为3306),为数据库参数添加空字符串,如: new mysqli("localhost", "username", "password", "", port)
*在使用PDO连接数据库的时候必须设置数据库名。
3、关闭数据库
$conn = null;
4、创建数据库
<?php
try{
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//PDO::ATTR_ERRMODE:错误报告。
//PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常。
$sql = "CREATE DATABASE myDBPDO"; //设置sql语句
$conn->exec($sql); //执行sql语句
echo "Database created sucessfully<br/>";
}catch(PDOException $e){
echo $sql."<br/>".$e->getMessage();
}finally{
$conn = null;
}
?>
5、创建数据表
在设置了数据类型后,你可以为每个列指定其他选项的属性:
-
NOT NULL - 每一行都必须含有值(不能为空),null 值是不允许的。
-
DEFAULT value - 设置默认值
-
UNSIGNED - 使用无符号数值类型,0 及正数
-
AUTO INCREMENT - 设置 MySQL 字段的值在新增记录时每次自动增长 1
-
PRIMARY KEY - 设置数据表中每条记录的唯一标识。 通常列的 PRIMARY KEY 设置为 ID 数值,与AUTO_INCREMENT 一起使用。
每个表都应该有一个主键(本列为 "id" 列),主键必须包含唯一的值。
以下实例展示了如何在 PHP 中创建表:
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
try{
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$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
)";
$conn->exec($sql);
echo "Table MyGuests created successfully";
}catch(PDOException $e){
echo $sql . "<br>" . $e->getMessage();
}finally{
$conn = null;
}
?>
6、插入数据
在创建完数据库和表后,我们可以向表中添加数据。
以下为一些语法规则:
-
PHP 中 SQL 查询语句必须使用引号
-
在 SQL 查询语句中的字符串值必须加引号
-
数值的值不需要引号
-
NULL 值不需要引号
INSERT INTO 语句通常用于向 MySQL 表添加新的记录:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
注意: 如果列设置 AUTO_INCREMENT (如 "id" 列) 或 TIMESTAMP (如 "reg_date" 列),,我们就不需要在 SQL 查询语句中指定值; MySQL 会自动为该列添加值。
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
try{
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests(firstname,lastname,email)
VALUES('JOHN','Doe','john@example.com')
";
$conn->exec($sql);
echo "New record created successfully";
}catch(PDOException $e){
echo $sql . "<br>" . $e->getMessage();
}finally{
$conn = null;
}
?>
7、插入多条数据
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
try{
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction(); //开始事务
$conn->exec("INSERT INTO MyGuests(firstname,lastname,email)
VALUES('John','Doe','john@example.com')");
$conn->exec("INSERT INTO MyGuests(firstname,lastname,email)
VALUES('Mary','Moe','Mary@example.com')");
$conn->exec("INSERT INTO MyGuests(firstname,lastname,email)
VALUES('Julie','Dooley','Julie@example.com')");
$conn->commit(); //结束事务
echo "New records created successfully";
}catch(PDOException $e){
$conn->rollback();
echo $sql . "<br>" . $e->getMessage();
}finally{
$conn = null;
}
?>
8、使用预处理语句
MySQL 预处理语句不仅大大减少了需要传输的数据量,还提高了命令的处理效率。
预处理语句对于防止 MySQL 注入是非常有用的。
预处理语句及绑定参数
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
-
预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
-
数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出
-
执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
-
预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)
-
绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句
-
预处理语句针对SQL注入是非常有用的,因为 参数值发送后使用不同的协议,保证了数据的合法性。
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
try{
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//预处理SQL语句并绑定参数
$stmt = $conn->prepare("INSERT INTO MyGuests(firstname,lastname,email)
VALUES(:firstname,:lastname,:email)");
$stmt->bindParam(':firstname',$firstname);
$stmt->bindParam(':lastname',$lastname);
$stmt->bindParam(':email',$email);
//插入行
$firstname="li";
$lastname="long";
$email="1715453224@qq.com";
$stmt->execute();
//插入其他行
$firstname="yi";
$lastname="zhe";
$email="1314520@qq.com";
$stmt->execute();
//插入其他行
$firstname="su";
$lastname="ruiqi";
$email="5520520@qq.com";
$stmt->execute();
echo "New records created successfully";
}catch(PDOException $e){
echo $sql . "<br>" . $e->getMessage();
}finally{
$conn = null;
}
?>
9、读取数据
当 PHP 连接到 MySQL 数据库后,需要向数据库读取数据?那么怎么读取呢?一起来看看。
SELECT 语句用于从数据表中读取数据:
SELECT column_name(s) FROM table_name
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
echo "<table style='border: solid 1px black;'>";//打印表格,设置表格属性
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th><th>Email</th><th>Reg date</th></tr>";
class TableRows extends RecursiveIteratorIterator { //继承迭代器
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "
";
}
}
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM MyGuests"); //预处理SQL语句
$stmt->execute(); //执行预处理语句
// 设置结果集为关联数组
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); //获取模式
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v; //fetchAll返回多个行记录
}
}catch(PDOException $e){
echo "Error: " . $e->getMessage();
}finally{
$conn = null;
}
echo "</table>";
?>
10、Where子句
WHERE 子句用于提取满足指定标准的的记录。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
$conn = new mysqli($servername, $username, $password,$dbname);
if(mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($conn,"select * from MyGuests
where firstname='john'");
if(!$result){
printf("Error: %s\n", mysqli_error($conn));
exit();
}
while($row = mysqli_fetch_array($result)){
echo $row['firstname'] . " " . $row['lastname'];
echo "<br>";
}
?>
11、Order By关键词
ORDER BY关键词用于对记录集中的数据进行排序。
ORDER BY关键词默认对记录进行升序排序。
如果你想降序排序,请使用 DESC 关键字。
语法:
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
$conn = new mysqli($servername, $username, $password,$dbname);
if(mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($conn,"select * from MyGuests
order by firstname");
if (!$result){
printf("Error: %s\n", mysqli_error($conn));
exit();
}
while($row = mysqli_fetch_array($result)){
echo $row['firstname'] . " " . $row['lastname'];
echo "<br>";
}
mysqli_close($conn);
?>
11.1根据两列进行排序
可以根据多个列进行排序。当按照多个列进行排序时,只有第一列的值相同时才使用第二列:
SELECT column_name(s)
FROM table_name
ORDER BY column1, column2
12、Update
UPDATE 语句用于更新数据库表中已存在的记录。
语法:
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
注释:请注意 UPDATE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要更新。如果您想省去 WHERE 子句,所有的记录都会被更新!
如需学习更多关于 SQL 的知识,请访问我们的 SQL 教程。
为了让 PHP 执行上面的语句,我们必须使用 mysqli_query() 函数。该函数用于向 MySQL 连接发送查询或命令。
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
$conn = new mysqli($servername, $username, $password,$dbname);
if(mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($conn,"update MyGuests set email='110@qq.com' where firstname='yi' and lastname='zhe'");
echo "Update records successfully";
mysqli_close($conn);
?>
13.Delete From
DELETE FROM 语句用于从数据库表中删除记录。
语法
DELETE FROM table_name
WHERE some_column = some_value
注释:请注意 DELETE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要删除。如果您想省去 WHERE 子句,所有的记录都会被删除!
如需学习更多关于 SQL 的知识,请访问我们的 SQL 教程。
为了让 PHP 执行上面的语句,我们必须使用 mysqli_query() 函数。该函数用于向 MySQL 连接发送查询或命令。
实例:
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
$conn = new mysqli($servername, $username, $password,$dbname);
if(mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($conn,"delete from MyGuests where firstname='yi'");
echo "Delete records successfully";
mysqli_close($conn);
?>
14、数据库ODBC
ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。
创建ODBC连接
通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。
这是创建到达 MS Access 数据库的 ODBC 连接的方法:
- 在控制面板中打开管理工具图标。
- 双击其中的数据源(ODBC)图标。
- 选择系统 DSN 选项卡。
- 点击系统 DSN 选项卡中的添加。
- 选择Microsoft Access Driver。点击完成。
- 在下一个界面,点击选择来定位数据库。
- 为数据库起一个数据源名(DSN)。
- 点击确定。
请注意,必须在您的网站所在的计算机上完成这个配置。如果您的计算机上正在运行 Internet 信息服务(IIS),上面的指令将会生效,但是如果您的网站位于远程服务器,您必须拥有对该服务器的物理访问权限,或者请您的主机提供商为您建立 DSN。
<html>
<body>
<?php
$conn=odbc_connect('northwind','','');//DSN连接
if(!$conn){
exit("Connection Failed: " . $conn);
}
$sql="select * from customers";
$rs=odbc_exec($conn,$sql);//执行SQL语句,并返回到数据集
if(!$rs){
exit("Error in SQL");
}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs)){ //取回数据集
$compname=odbc_result($rs,"CompanyName");
$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body>
</html>