PHP PDO 准备语句中的绑定标识符和语法关键字
动态查询通过利用变量定义表名、列来允许灵活的数据库操作名称和搜索值。但是,使用 PDO 准备好的语句绑定标识符(表或字段名称)或语法关键字可能会导致意外结果。
问题:
使用 bindParam() 或 bindValue 时() 绑定表示标识符或语法关键字的变量,返回空数组而不是预期的数据库结果。
解释:
PDO 准备好的语句只能绑定数据文字。因此,尝试绑定标识符或关键字不会得到预期的结果。
解决方案:
要创建安全可靠的动态查询,至关重要:
代码示例:
格式化并验证标识符:
$field = "`" . str_replace("`", "``", $field) . "`";
白名单并验证关键字:
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
然后,将清理后的变量包含在准备好的变量中声明:
$stmt = $db->prepare(' SELECT * FROM ? WHERE ? LIKE ? '); $stmt->bindParam(1, $searchTable); $stmt->bindParam(2, $searchBy); $stmt->bindValue(3, '%' . $searchTerm . '%');
通过遵守这些规则,您可以确保动态数据库查询的有效性和安全性。
以上是PHP PDO 准备语句中可以绑定标识符和关键字吗?的详细内容。更多信息请关注PHP中文网其他相关文章!