数据库:
连接MYSQL:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB",$username, $password);
echo "Connectedsuccessfully";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
关闭连接:
连接在脚本执行完后会自动关闭。你也可以使用以下代码来关闭连接。
$conn = null;
关于PDO安装的教程:http://php.net/manual/en/pdo.installation.php
新建数据库:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = newPDO("mysql:host=$servername;dbname=myDB", $username, $password);
// 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE myDBPDO";
// 使用 exec() ,因为没有结果返回
$conn->exec($sql);
echo "Database createdsuccessfully<br>";
}
catch(PDOException $e)
{
echo $sql ."<br>" . $e->getMessage();
}
$conn = null;
?>
创建表:
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNEDAUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOTNULL,
lastname VARCHAR(30) NOTNULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
// use exec() because noresults are returned
$conn->exec($sql);
插入数据:
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe','john@example.com')";
// use exec() because noresults are returned
$conn->exec($sql);
插入多条数据:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = newPDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode toexception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 开始事务
$conn->beginTransaction();
// SQL 语句
$conn->exec("INSERTINTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe','john@example.com')");
$conn->exec("INSERTINTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com')");
$conn->exec("INSERTINTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley','julie@example.com')");
// commit the transaction
$conn->commit();
echo "New recordscreated successfully";
}
catch(PDOException $e)
{
// roll back the transactionif something failed
$conn->rollback(); //回滚
echo $sql ."<br>" . $e->getMessage();
}
$conn = null;
?>
就像j2ee中的tranction tx = ..,tx.commit()。
预处理:
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
1. 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记。例如:INSERT INTO MyGuests (firstname, lastname, email)VALUES(?, ?, ?)
2. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出
3. 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
· 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)
· 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句
· 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
// 预处理 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 ="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();
…
查询:
几种写法:
$sql="select * from myguests";//可加where子句
$resultAll=$conn->query($sql);//返回结果,用query函数
foreach($resultAllas $result)
{ // 输出结果集中的数据
echo $result['firstname'].' ';
echo $result['lastname'].' ';
echo $result['email'].'<br>';
}
$col= $resultAll->fetchColumn(2);//取第一行结果的某个列,默认第一列
echo$col;
$col= $resultAll->fetchAll();//全部
print_r($col);
sql可加where子句进一步查询;可加order by等进行排序。
更新:
$sql="update myguests set email='hunterlew@163.com'where id=1";
echo$conn->exec($sql);
注释:请注意UPDATE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要更新。如果您想省去 WHERE 子句,所有的记录都会被更新!
删除(略)
总结:
使用PDO数据库抽象层往数据表中更新、插入或者删除数据,都是通过PDO的exec()方法,而且exec()执行完毕还会返回影响的数据行总数。查询则用query()方法,返回查询结果,可用foreach($resultAll as $result)遍历。