我正在为使用 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 字段用作普通文本,以免引起此类问题?