近期在学习PHP,这里总结一下PHP与MySQL的交互。
这里我们使用mysqli进行连接。
mysqli扩展允许我们访问MySQL 4.1及以上版本提供的功能。
想深入了解mysqli的信息可以访问下面的网站进行学习:
http://php.net/manual/zh/book.mysqli.php
这里我们根据几个例子来简单了解交互方式。
环境:
wampServer+sublime
创建数据库
例子:建立名为mydb的数据库
<?php /* 建立连接 其中第一个参数是服务器地址。 其中第二个参数是用户名。 其中第三个参数是密码。 这些参数需要自己查。 */ $con =new mysqli("localhost","root","123456"); //判断连接是否成功 if (!$con){ //连接失败输出错误。 die('无法连接: ' . mysql_error()); } //生成SQL语句,创建数据库mydb $sql = " CREATE DATABASE mydb "; //调用mysqli的query方法 if ($con->query($sql) === TRUE){ echo "创建成功"; }else{ echo "数据库创建失败: " . mysql_error(); } //关闭连接 $con->close(); ?>
创建数据表
例子:创建一个名User的数据表
SQL语句为:
CREATE TABLE User (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, sex VARCHAR(20) NOT NULL, dob DATE NOT NULL, email VARCHAR(50) NOT NULL);
代码:
<?php // 创建连接,这里多的参数是数据库名称。 $con = new mysqli("localhost","root","123456", "mydb"); // 检测连接 if ($con->connect_error) { die("连接失败: " . $con->connect_error); } // 使用 sql 创建数据表 $sql = "CREATE TABLE User ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, sex VARCHAR(20) NOT NULL, dob DATE NOT NULL, email VARCHAR(50) NOT NULL );"; //调用mysqli的query方法 if ($con->query($sql)) { echo "Table User created successfully"; } else { echo "创建数据表错误: " . $con->error; } //关闭连接 $con->close(); ?>
数据的插入
我们向数据表里插入如下数据:
‘测试’, ‘12345678’,’man’,’2016-3-3’,’test@example.com’
SQL语句如下:
INSERT INTO User (name,password,sex,dob,email) VALUES ('测试', '12345678','man','2016-3-3','test@example.com');
代码:
<?php // 创建连接 $con = new mysqli("localhost","root","123456", "mydb"); // 检测连接 if ($con->connect_error) { die("连接失败: " . $con->connect_error); } // 使用 sql 插入数据 $sql = "INSERT INTO User (name,password,sex,dob,email) VALUES ('测试', '12345678','man','2016-3-3','test@example.com')"; if ($con->query($sql)) { echo "数据插入成功"; } else { echo "插入错误: " . $con->error; } //关闭连接 $con->close(); ?>
数据的预处理
插入数据时为了提高效率和防止注入使用预处理方式。
使用如下语句:
INSERT INTO User (name,password,sex,dob,email) VALUES (?, ?,?,?,?);
在需要输入的信息位置用?代替。
这里要用到如下语句:
1)prepare()–>mysqli_stmt mysqli_prepare ( mysqli
2)bind_param()–>将变量绑定到准备好的语句中。
3)execute() –>mysqli_stmt_execute() 执行预处理语句。
例子如下:
<?php
// 创建连接
$con = new mysqli("localhost","root","123456", "mydb");
// 检测连接
if ($con->connect_error) {
die("连接失败: " . $con->connect_error);
}
//sql语句
$sql ="INSERT INTO User (name,password,sex,dob,email) VALUES (?, ?,?,?,?)";
// 预处理及绑定
$stmt = $con->prepare($sql);
/* bind_param() 设置每个'?'要装入的值 第一个参数是设置后几个参数的格式。 s->string, i->integer, d->double 第二个参数开始是上边需要装入的值。 */
$stmt->bind_param("sssss", $name, $password, $sex,$dob ,$email);
// 设置参数并执行
$name = "John";
$password = "111111111111";
$sex = "man";
$dob = "2015-2-2";
$email = "john@example.com";
// 执行预处理语句
$stmt->execute();
echo "新记录插入成功";
//关闭预处理
$stmt->close();
//关闭连接
$con->close();
?>
数据查询
查询数据库中的名字。
<?php // 创建连接 $con = new mysqli("localhost","root","123456", "mydb"); // 检测连接 if ($con->connect_error) { die("连接失败: " . $con->connect_error); } //查询语句 $sql = "SELECT name FROM User"; $result = $con ->query($sql); //输出数据 if($result->num_rows>0){ while($row =$result->fetch_assoc()){ echo $row["name"]."<br>"; } } $con->close(); ?>