准备工作
PHP 5 及以上版本建议使用以下方式连接 MySQL :
- MySQLi extension (“i” 意为 improved)
- PDO (PHP Data Objects)
PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。
所以,如果你的项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部分查询语句即可。 使用 MySQLi, 如果不同数据库,你需要重新编写所有代码,包括查询。
可以使用 phpinfo() 查看是否安装 MySQLi 扩展和 PDO,pdo_mysql,必须安装相应的扩展才能使用。
连接 MySQL
<?php
servername = "localhost";username = "username";
password = "password";connection = new mysqli(servername,username, password); // 创建连接实例
if (connection->connect_error) { // 检测连接
// PHP 5.2.9以前的版本使用 mysqli_connect_error() 函数判断
die("连接失败: " . connection->connect_error);
}
echo "连接成功";connection->close(); // 关闭连接
// PDO连接
try {
connection= new PDO("mysql:host=servername;dbname=myDB", username,password);
echo "连接成功";
}
catch(PDOException e)
{
echoe->getMessage();
}
$connection = null; // 关闭连接
数据库操作
使用连接实例 $connection 的 query 方法,可以执行任意的合法 SQL 语句,通过比较返回值是否为 true 判断 SQL 语句执行是否成功。
<?php
servername = "localhost";username = "username";
password = "password";dbname = "test";
// 创建连接
conn = new mysqli(servername, username,password, dbname);
// 检测连接
if (conn->connect_error) {
die("连接失败: " . conn->connect_error);
}
// 使用 sql 创建数据表sql = "CREATE TABLE Users (
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 Users (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if (conn->query(sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . sql . "<br>" .conn->error;
}
// 数据查询
sql = "SELECT id, firstname, lastname FROM Users";result = conn->query(sql);
if (result->num_rows>0) {
while(row = result->fetch_assoc()) { // 遍历输出数据
echo "id: " .row["id"]. " - firstname: " . row["firstname"]. " " . "<br>";
}
} else {
echo "0 结果";
}conn->close();
// 还可以使用下面的方法连接数据库进行查询
con=mysqli_connect(servername, username,password, dbname);
if (mysqli_connect_errno()) // 检测连接
{
echo "连接失败: " . mysqli_connect_error();
}result = mysqli_query(con,"SELECT * FROM Users
WHERE firstname='Wang'");
while(row = mysqli_fetch_array(result))
{
echorow['firstname'] . " " . $row['lastname'];
echo "<br>";
}
?>
注意事项
对于低版本的PHP,如PHP5.4,通过mysql
默认是不能获取数据模型的,也就是说查询的所有字段全为string,即使数据库中保存的是int类型。
使用mysqlnd
和mysqli
可以获取数据模型,但是需要手动设置。
$connection = mysqli_connect(host, username, password , database);
mysqli_options($connection, MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);