AI生成的PHP列表代码默认不带WHERE条件,需手动添加并用PDO/MySQLi预处理防止SQL注入;动态条件应通过数组拼接再绑定参数;禁用废弃mysql_*函数,注意空值判断与类型校验。

AI生成的PHP列表代码通常只包含基础查询,比如 SELECT * FROM table,确实默认不带 WHERE 条件。要加上筛选逻辑,关键是在SQL语句中手动插入 WHERE 子句,并确保参数安全(防SQL注入)。
用预处理语句加where条件(推荐)
这是最安全、最标准的做法,尤其涉及用户输入时:
- 使用PDO或MySQLi的预处理功能,把变量作为占位符传入
- 避免字符串拼接SQL,防止注入风险
- 示例(PDO):
$stmt = $pdo->prepare("SELECT * FROM users WHERE status = ? AND created_at > ?");
$stmt->execute(['active', '2024-01-01']);
$users = $stmt->fetchAll();动态构建where条件(多个可选筛选项)
当筛选条件不确定(如搜索表单有多个字段),需判断哪些参数存在再拼接:
- 把条件和参数分别存入数组,最后用
implode(' AND ', $conditions)拼SQL - 所有值仍走预处理绑定,不直接拼进SQL字符串
- 示例片段:
$conditions = [];
$params = [];
<p>if (!empty($_GET['name'])) {
$conditions[] = "name LIKE ?";
$params[] = '%' . $_GET['name'] . '%';
}
if (isset($_GET['category'])) {
$conditions[] = "category = ?";
$params[] = $_GET['category'];
}</p><p>$sql = "SELECT * FROM products";
if (!empty($conditions)) {
$sql .= " WHERE " . implode(' AND ', $conditions);
}</p><p>$stmt = $pdo->prepare($sql);
$stmt->execute($params);注意常见坑
- 别用 mysql_* 函数:已废弃且不支持预处理,必须升级到PDO或MySQLi
-
空值/零值判断要小心:比如
$_GET['id'] === '0'是有效值,不能只用empty()判定 -
日期、数字类型要类型校验:用
filter_var()或强转(如(int)$_GET['limit'])避免非法输入
快速测试技巧
开发时临时加调试,可打印最终SQL(但上线前务必关掉):
立即学习“PHP免费学习笔记(深入)”;
- PDO下可用
$stmt->debugDumpParams()查看绑定情况 - 或在绑定前用
vsprintf()模拟生成SQL(仅用于本地调试,勿用于生产)



















