У меня есть код, который динамически ищет данные в базе данных с помощью ajax, но я могу искать только по одному ключевому слову за раз. Я хотел бы изменить его, чтобы я мог искать несколько ключевых слов. Теперь, если я набираю 2 слова, разделенные пробелом и в базе данных, данные не разделяются пробелом, результата не будет. Если в базе данных данные:
'playstation3' или 'play cool station3'
и ищу:
игровая приставка
результатов не было. Я хотел бы узнать, можно ли изменить код, чтобы я мог искать два или более ключевых слова или слова, разделенные пробелом или другим словом, или DOT или подчеркивание или (-) или (+) или (%), или (что-нибудь еще lol).
Я знаю, что я должен использовать pdo или mysqli, но я использую это только для тестирования!
$queried = $_POST['query']; $search = mysql_query("SELECT * FROM links WHERE name LIKE '%$queried%'"); while($searche = mysql_fetch_array($search)){ echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>"; }
Чтобы динамически искать все ключевые слова, вы можете использовать функцию explode для разделения всех ключевых слов;
$queried = mysql_real_escape_string($_POST['query']); // always escape $keys = explode(" ",$queried); $sql = "SELECT * FROM links WHERE name LIKE '%$queried%' "; foreach($keys as $k){ $sql .= " OR name LIKE '%$k%' "; } $result = mysql_query($sql);
Примечание 1: Всегда избегайте ввода пользователя перед его использованием в запросе.
Примечание 2: функции mysql_ * устарели, используйте Mysqli или PDO в качестве альтернативы
Не используйте функции mysql_*
даже для testing
. Они не легче, чем mysqli
, на всякий случай, если вы считаете, что это легко проверить, а затем переместите.
Однако вы можете разделить свой вход на a и попробовать это
<?php $queried="abc,test, testing"; $values=explode(',',$queried); $sql="SELECT * FROM links WHERE"; $i=0; foreach($values as $v) { $v=trim($v); if($i==0) { $sql.=" name LIKE '%$v%'"; } else { $sql.=" OR name LIKE '%$v%'"; } $i++; } $search = mysql_query($sql); while($searche = mysql_fetch_array($search)){ echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>"; } ?>
ресурсов<?php $queried="abc,test, testing"; $values=explode(',',$queried); $sql="SELECT * FROM links WHERE"; $i=0; foreach($values as $v) { $v=trim($v); if($i==0) { $sql.=" name LIKE '%$v%'"; } else { $sql.=" OR name LIKE '%$v%'"; } $i++; } $search = mysql_query($sql); while($searche = mysql_fetch_array($search)){ echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>"; } ?>
Просто добавьте предложение OR.
Например
SELECT * FROM links WHERE name LIKE '%$keyword1%' OR name LIKE '%$keyword2%'
Но я настоятельно рекомендую вам использовать параметризованный запрос или другую безопасную библиотеку, чтобы избежать Sql Injection Attacks