我正在使用预准备语句来使用PDO进行搜索功能,我正在使用like子句。 Mysql是5.5.32
function dblink(){
# hidden #
$conn = new PDO("mysql:host=localhost;dbname=$database",
$username, $password, array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ
));
return $conn;
}
$conn = dblink();
$query = "select * from tablename where attrib like ? ;";
$stmt = $conn->prepare($query);
$stmt->execute(array($_POST['field']."%"));
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
当用户在html表单中输入%for field时,这会转储所有表格内容。我认为预处理语句会处理它并且执行中有%,以便它匹配输入的子字符串。
如何仅将POST字段用作普通文本,以免造成此类问题?
答案 0 :(得分:1)
当用户在html表单中输入%for field时,这会转储所有表格内容。
是。这就是LIKE运营商的确切目的 不,它与准备好的陈述无关。后者用于格式化数据,而不是干扰查询逻辑。
如果您不喜欢代码的工作方式 - 请更改它。但目前它的工作方式与您编码的方式完全一致,没有任何缺陷。