以下是PHP中使用问号占位符的详细示例及输出结果说明:
示例1:基础查询
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare("SELECT name FROM users WHERE id = ?");
$stmt->execute([1]);
$result = $stmt->fetch();
print_r($result);输出结果:
若ID为1的用户名为John,则输出:
Array ( [name] => John [0] => John )
示例2:多条件查询
$stmt = $pdo->prepare("SELECT * FROM products WHERE price > ? AND stock < ?");
$stmt->execute([50, 100]);
$results = $stmt->fetchAll();
print_r($results);输出结果:
返回价格大于50且库存小于100的所有产品数组,例如:
Array ( [0] => Array ( [id] => 101 [name] => Laptop [price] => 999 [stock] => 10 ) [1] => Array ( [id] => 102 [name] => Mouse [price] => 60 [stock] => 5 ) )
示例3:插入数据
$stmt = $pdo->prepare("INSERT INTO orders (user_id, product_id) VALUES (?, ?)");
$stmt->execute([5, 20]);
echo "插入的行数: " . $stmt->rowCount();输出结果:
插入的行数: 1
示例4:IN子句动态参数
$ids = [3, 7, 9];
$placeholders = implode(',', array_fill(0, count($ids), '?'));
$stmt = $pdo->prepare("SELECT * FROM items WHERE id IN ($placeholders)");
$stmt->execute($ids);
$items = $stmt->fetchAll();
print_r($items);输出结果:
返回ID为3、7、9的所有条目,例如:
Array ( [0] => Array ( [id] => 3 [name] => Book ) [1] => Array ( [id] => 7 [name] => Pen ) )
示例5:更新操作
$stmt = $pdo->prepare("UPDATE articles SET views = ? WHERE id = ?");
$stmt->execute([1000, 42]);
echo "更新的行数: " . $stmt->rowCount();输出结果:
更新的行数: 1
关键点总结
防注入:所有示例均通过问号占位符隔离SQL逻辑与数据。
顺序绑定:参数按占位符顺序传递,需严格匹配数量。
灵活扩展:动态生成占位符(如
IN子句)可适应复杂场景。