当前位置: 首页> 黑客网> 正文

如何设置参数化查询

以几个常见的环境为例:

PHP与MySQLi

如何设置参数化查询

使用PHP和MySQLi时,你可以用预处理语句(prepared statements)来实现参数化查询。

```php

// 创建连接

$mysqli = new mysqli('localhost', 'username', 'password', 'database');

// 检查连接

if ($mysqli->connect_error) {

die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);

}

// 定义SQL

$stmt = $mysqli->prepare("SELECT FROM users WHERE username = ? AND password = ?");

// 绑定参数

$stmt->bind_param('ss', $username, $password);

// 设置变量

$username = "john";

$password = "12345";

// 执行查询

$stmt->execute();

// 获取结果

$result = $stmt->get_result();

// 输出结果

while ($row = $result->fetch_assoc()) {

print_r($row);

}

// 关闭连接

$stmt->close();

$mysqli->close();

```

Python与SQLite3

在Python中使用SQLite3库进行参数化查询的例子:

```python

import sqlite3

连接到SQLite数据库

conn = sqlite3.connect('example.db')

创建一个Cursor:

cursor = conn.cursor()

执行一条带参数的SQL语句

cursor.execute("SELECT FROM users WHERE name = ? AND age = ?", ('John', 30))

获取所有结果

results = cursor.fetchall()

for row in results:

print(row)

关闭Cursor:

cursor.close()

提交事务:

conn.commit()

关闭Connection:

conn.close()

```

Java与JDBC

Java使用JDBC进行参数化查询的例子:

```java

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class ParameterizedQueryExample {

public static void main(String[] args) {

String url = "jdbc:mysql://localhost:3306/database";

String user = "username";

String password = "password";

try (Connection conn = DriverManager.getConnection(url, user, password)) {

String sql = "SELECT FROM users WHERE username = ? AND password = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

// 设置参数

pstmt.setString(1, "john");

pstmt.setString(2, "12345");

ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

System.out.println(rs.getString("username") + ", " + rs.getString("password"));

}

rs.close();

pstmt.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

```

这些示例展示了如何在不同的环境中创建参数化查询。关键点在于不要直接将用户输入拼接到SQL字符串中,而是使用占位符(如`?`),然后单独设置这些参数的值。这样可以确保即使用户输入包含特殊字符或SQL关键字,也不会影响查询的安全性。