• 认真地记录技术中遇到的坑!

PHP使用MySQL

mysql 悠悠 1年前 (2017-08-03) 337次浏览 0个评论

准备工作

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)
{
    echo $e->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))
{
    echo $row['firstname'] . " " . $row['lastname'];
    echo "<br>";
}
?>

注意事项

对于低版本的PHP,如PHP5.4,通过mysql默认是不能获取数据模型的,也就是说查询的所有字段全为string,即使数据库中保存的是int类型。

使用mysqlndmysqli可以获取数据模型,但是需要手动设置。

$connection = mysqli_connect(host, username, password , database);
mysqli_options($connection, MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);

转载请注明出处 PHP使用MySQL
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址