首页 >数据库 >mysql教程 >为什么 MySQLi 中的准备语句对于安全数据库交互至关重要?

为什么 MySQLi 中的准备语句对于安全数据库交互至关重要?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-23 05:31:19927浏览

Why Are Prepared Statements in MySQLi Essential for Secure Database Interactions?

了解准备语句执行中的错误

在您的代码片段中,由于缺少参数绑定,您在执行准备语句时遇到错误。根据 MySQLi 文档,在执行之前,准备好的语句中的参数标记必须使用 mysqli_stmt_bind_param 绑定到应用程序变量。

绑定参数并解决错误

要纠正错误,请按如下方式修改代码:

$name = 'one';
$age  = 1;

$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

// Bind parameters to application variables (string & integer in this case)
$stmt->bind_param('si', $name, $age);

// Execute the prepared statement after binding
$stmt->execute();

使用 MySQLi 进行准备的必要性语句

由于其增强的安全功能,建议使用 MySQLi 进行准备语句。准备好的语句通过将查询与值分离来防止 SQL 注入漏洞,从而降低恶意代码被注入数据库的风险。

准备好的语句的综合示例

这里是准备好的语句的完整示例,涵盖连接、插入和选择以及错误处理:

<?php

// Database connection
$mysqli = new mysqli("localhost", "root", "root", "test");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit;
}

// Prepare statement for insertion
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
if (!$stmt) {
    echo "Error preparing statement: " . $mysqli->error;
    exit;
}

// Bind parameters and execute insertion
$name = 'one';
$age  = 1;
$stmt->bind_param('si', $name, $age);
if (!$stmt->execute()) {
    echo "Error executing statement: " . $stmt->error;
    exit;
}

// Prepare statement for selection
$stmt = $mysqli->prepare("SELECT name, age FROM users WHERE id = ?");
if (!$stmt) {
    echo "Error preparing statement: " . $mysqli->error;
    exit;
}

// Bind parameter and execute selection
$id = 1;
$stmt->bind_param('i', $id);
if (!$stmt->execute()) {
    echo "Error executing statement: " . $stmt->error;
    exit;
}

// Retrieve and display results
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo "Name: " . $row['name'] . ", Age: " . $row['age'] . "<br>";
}

// Close statement and connection
$stmt->close();
$mysqli->close();
?>

此示例包括每个步骤的错误处理,确保查询的正确执行并提供出现任何问题时提供信息性错误消息。

以上是为什么 MySQLi 中的准备语句对于安全数据库交互至关重要?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn