php mysqli 操作

在 PHP 中使用 mysqli 扩展与 MySQL 数据库进行交互是一个常见的操作。下面是如何使用 mysqli 来增加一条数据、删除一条数据、查询一条数据以及查询多条数据的示例代码。

1、增加一条数据


<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 要插入的数据
$name = "John Doe";
$email = "[email protected]";

// SQL 插入语句
$sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')";

if ($conn->query($sql) === TRUE) {
    echo "新记录插入成功";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

// 关闭连接
$conn->close();
?>

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 要插入的数据
$name = "John Doe";
$email = "[email protected]";

// 准备 SQL 插入语句
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email); // "ss" 表示两个字符串参数

if ($stmt->execute() === TRUE) {
    echo "新记录插入成功";
} else {
    echo "Error: " . $stmt->error;
}

$stmt->close();
$conn->close();
?>

2. 删除一条数据

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 要删除的数据的ID
$id = 1;

// SQL 删除语句
$sql = "DELETE FROM users WHERE id = $id";

if ($conn->query($sql) === TRUE) {
    echo "记录删除成功";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

// 关闭连接
$conn->close();
?>
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 要删除的数据的ID
$id = 1; // 注意:在实际应用中,你应该验证和清理这个输入

// 准备 SQL 删除语句
$stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // "i" 表示一个整数参数

if ($stmt->execute() === TRUE) {
    echo "记录删除成功";
} else {
    echo "Error: " . $stmt->error;
}

$stmt->close();
$conn->close();
?>

3. 查询一条数据

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 要查询的数据的ID
$id = 1;

// SQL 查询语句
$sql = "SELECT id, name, email FROM users WHERE id = $id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 结果";
}

// 关闭连接
$conn->close();
?>
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 要查询的数据的ID
$id = 1; // 注意:在实际应用中,你应该验证和清理这个输入

// 准备 SQL 查询语句
$stmt = $conn->prepare("SELECT id, name, email FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // "i" 表示一个整数参数
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 结果";
}

$stmt->close();
$conn->close();
?>
<?php
include_once ("db.php");

// 定义要查询的参数
$account = $_POST["member_name"];
$password = $_POST["member_password"];

// 准备 SQL 语句
// 注意:对于数字类型的参数,不需要引号;对于字符串类型的参数,需要适当的引号(在预处理语句中会自动处理)
$sql = "SELECT * FROM `members` WHERE `name` = ? AND `password` = ?";
$stmt = $mysqli->prepare($sql);

// 绑定参数到 SQL 语句
$stmt->bind_param("ss", $account, $password); // "ss" 表示两个字符串参数
// 如果参数是数字,可以使用 "i" (整型) 或 "d" (双精度浮点型)
// 例如: $stmt->bind_param("is", $param1, $param2); 如果 $param1 是字符串,$param2 是整型

// 执行语句
$stmt->execute();

// 获取结果
$result = $stmt->get_result();
$row = $result->fetch_assoc(); // 获取一行作为关联数组

// 检查是否找到了行
if ($row) {
    // 处理找到的行数据
    $memberLogin = md5("memberLogin");
    session_start();
    $_SESSION[$memberLogin] = $account;
    echo "登录成功";
    echo "<script>window.location.href = '/index.php';</script>";
} else {
    echo "<script>alert('账户或密码错误');history.go(-1);</script>";
    //返回
}

// 关闭语句和连接
$stmt->close();
$mysqli->close();


在这个例子中,我们创建了一个到 MySQL 数据库的连接,然后准备了一个带有两个占位符(?)的 SQL 查询语句。我们使用 bind_param 方法来绑定实际的参数值到这些占位符。执行语句后,我们使用 get_result 方法来获取结果对象,并使用 fetch_assoc 方法来获取第一行数据作为关联数组。

请注意,LIMIT 1 用于确保查询只返回一条数据。如果你的查询逻辑允许返回多条数据,你可以省略 LIMIT 1 或使用循环来遍历结果集。

此外,对于字符串类型的参数,我们在 bind_param 方法中使用了 “ss” 来指示有两个字符串参数。如果参数类型不同(例如,一个是字符串,另一个是整数),你需要相应地调整类型指示符(例如,”is”)。

4. 查询多条数据

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// SQL 查询语句
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 结果";
}

// 关闭连接
$conn->close();
?>
<?php
// ...(连接代码与上面相同)

// 准备 SQL 查询语句(注意:这里没有绑定参数,因为查询是固定的)
$stmt = $conn->prepare("SELECT id, name, email FROM users");
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 结果";
}

$stmt->close();
$conn->close();
?>

注意事项
1、安全性:在生产环境中,避免直接将用户输入插入到 SQL 查询中,以防止 SQL 注入攻击。可以使用预处理语句(prepared statements)来防止这种攻击。
2、错误处理:对于生产环境,建议添加更详细的错误处理和日志记录。
3、连接管理:如果需要在多个脚本或多次操作中使用数据库连接,考虑使用连接池或持久连接。
4、在 PHP 中使用 mysqli 扩展与 MySQL 数据库交互时,防止 SQL 注入是非常重要的。SQL 注入攻击通常发生在攻击者能够操纵 SQL 查询的输入部分时。为了防止这种情况,你应该使用预处理语句(prepared statements)和参数化查询。
5、然而,对于上面的查询多条数据的例子,由于查询不包含用户输入,直接使用 mysqli_query() 也是可以的