以下假定您定義了一個名爲SQL_PREFIX_STRING的常量。
$string = '(php AND mysql) OR java';
preg_match_all('/[a-z]+/', $string, $skills); // puts the skills in an array
$skills = $skills[0]; // shift array to get the matching values
array_walk($skills, function (&$skill) {$skill = '%'.$skill.'%';}); // add wildcards to parameters
$query_string = preg_replace('/[a-z]+/', 'c.Skillset LIKE ?', $string); // create the ? parameters for the SQL string
$pdoStatement = $pdo->prepare(SQL_PREFIX_STRING.$sql); // prepare
$pdoStatement->execute($skills); // execute
你期望這個工具的用戶有多惡意?我知道你不應該爲最壞的用戶設計任何東西,但如果它需要標記/解析字符串以驗證它是有效的,那麼這比一個preg_replaces更難。 – Steve
嗯,我打算做htmlspecialchars它假設的搜索項目如'ajax','mysql'編碼,然後其他任何東西是由函數編寫的,它將邏輯解釋爲來自輸入,所以沒有可能注入...我認爲這樣可以,因爲根據我的理解,只要在搜索字符串中安排ands和ors以及方括號,就不會有惡意 – dlofrodloh
但是'((((((PHP AND mysql)OR ajax'例如,將不是一個有效的查詢。因此,匹配偶數的括號可以增加一些複雜性。 – Steve