PHP MySQL 预处理语句

预处理语句及绑定参数

使用预处理语句和绑定参数可以增加代码的安全性和性能。下面是使用MySQLi和PDO进行预处理语句和参数绑定的示例:

使用MySQLi进行预处理语句和绑定参数:

<?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);
    }

    // 准备预处理语句
    $stmt = $conn->prepare("INSERT INTO mytable (firstname, lastname, email) VALUES (?, ?, ?)");

    // 绑定参数
    $stmt->bind_param("sss", $firstname, $lastname, $email);

    // 设置参数值
    $firstname = "John";
    $lastname = "Doe";
    $email = "johndoe@example.com";

    // 执行预处理语句
    if ($stmt->execute()) {
        echo "数据插入成功";
    } else {
        echo "数据插入失败: " . $stmt->error;
    }

    // 关闭预处理语句和数据库连接
    $stmt->close();
    $conn->close();
?>

使用PDO进行预处理语句和绑定参数:

<?php
    // 数据库连接参数
    $servername = "localhost";
    $username = "your_username";
    $password = "your_password";
    $dbname = "your_database";

    try {
        // 创建数据库连接
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

        // 设置PDO错误模式为异常
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // 准备预处理语句
        $stmt = $conn->prepare("INSERT INTO mytable (firstname, lastname, email) VALUES (?, ?, ?)");

        // 绑定参数
        $stmt->bindParam(1, $firstname);
        $stmt->bindParam(2, $lastname);
        $stmt->bindParam(3, $email);

        // 设置参数值
        $firstname = "John";
        $lastname = "Doe";
        $email = "johndoe@example.com";

        // 执行预处理语句
        if ($stmt->execute()) {
            echo "数据插入成功";
        } else {
            echo "数据插入失败";
        }

        // 关闭预处理语句和数据库连接
        $stmt = null;
        $conn = null;
    } catch(PDOException $e) {
        echo "数据库连接失败: " . $e->getMessage();
    }
?>

在上述示例中,我们首先准备了一个带有占位符的预处理语句,然后使用bind_param(MySQLi)或bindParam(PDO)方法绑定参数。在执行预处理语句之前,我们设置了参数的值。这样可以防止SQL注入攻击,并提高执行效率。

请注意,在绑定参数时,我们使用bind_param(MySQLi)或bindParam(PDO)方法来指定参数的数据类型。在MySQLi中,参数类型字符串由字母组成,每个字母代表一个参数的数据类型。在PDO中,我们使用参数的位置索引(从1开始)来绑定参数。

最后,我们执行预处理语句并根据执行结果输出相应的消息。在完成插入操作后,记得关闭预处理语句和数据库连接。

预处理语句和参数绑定可以确保输入数据的安全性,并提高数据库操作的性能。

MySQLi 预处理语句

MySQLi(MySQL improved extension)是PHP中用于与MySQL数据库进行交互的扩展。下面是使用MySQLi进行预处理语句的示例:

<?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);
    }

    // 准备预处理语句
    $stmt = $conn->prepare("SELECT * FROM mytable WHERE age > ?");

    // 绑定参数
    $stmt->bind_param("i", $age);

    // 设置参数值
    $age = 25;

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

    // 获取结果集
    $result = $stmt->get_result();

    // 输出结果
    while ($row = $result->fetch_assoc()) {
        echo "姓名:" . $row["name"] . ", 年龄:" . $row["age"] . "<br>";
    }

    // 关闭预处理语句和数据库连接
    $stmt->close();
    $conn->close();
?>

在上述示例中,我们首先创建了一个数据库连接,并检查连接是否成功。然后,我们准备了一个带有占位符的预处理语句,其中?表示待填充的参数。在这个例子中,我们使用了一个参数age,用于筛选年龄大于给定值的记录。

接下来,我们使用bind_param方法绑定参数。在此方法中,第一个参数是一个字符串,指定参数的数据类型。在这个例子中,我们使用了i,表示参数是一个整数。第二个参数是要绑定的变量,即我们之后要设置的参数的值。

然后,我们设置了参数的值。在这个例子中,我们将age设置为25。

接下来,我们执行预处理语句,并使用get_result方法获取结果集。然后,我们使用fetch_assoc方法从结果集中获取每一行的数据,并输出到页面上。

最后,我们关闭了预处理语句和数据库连接。

使用MySQLi的预处理语句可以确保数据的安全性,并提高执行效率。

PDO 中的预处理语句

在PHP中,PDO(PHP Data Objects)是另一种与数据库交互的扩展。下面是使用PDO进行预处理语句的示例:

<?php
    // 数据库连接参数
    $servername = "localhost";
    $username = "your_username";
    $password = "your_password";
    $dbname = "your_database";

    // 创建数据库连接
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

    // 设置错误处理模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 准备预处理语句
    $stmt = $conn->prepare("SELECT * FROM mytable WHERE age > :age");

    // 绑定参数
    $stmt->bindParam(":age", $age);

    // 设置参数值
    $age = 25;

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

    // 获取结果集
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 输出结果
    foreach ($result as $row) {
        echo "姓名:" . $row["name"] . ", 年龄:" . $row["age"] . "<br>";
    }

    // 关闭数据库连接
    $conn = null;
?>

在上述示例中,我们首先创建了一个PDO对象,用于与数据库建立连接。在连接字符串中,我们指定了数据库的主机名、用户名、密码和数据库名。

然后,我们将错误处理模式设置为异常模式,以便在发生错误时抛出异常。

接下来,我们准备了一个带有命名占位符的预处理语句,其中:age表示待填充的参数。在这个例子中,我们使用了一个参数:age,用于筛选年龄大于给定值的记录。

然后,我们使用bindParam方法绑定参数。在这个方法中,第一个参数是参数的名称,即预处理语句中的占位符。第二个参数是要绑定的变量,即我们之后要设置的参数的值。

接下来,我们设置了参数的值。在这个例子中,我们将:age设置为25。

然后,我们执行预处理语句,并使用fetchAll方法获取结果集。该方法返回一个包含所有行的关联数组。

最后,我们使用foreach循环遍历结果集,并将每一行的数据输出到页面上。

最后,我们关闭了数据库连接。

使用PDO的预处理语句可以确保数据的安全性,并提供更多的数据库驱动选项。

Leave a Reply 0

Your email address will not be published. Required fields are marked *