如果字符串包含mysql-database的值,输出$error = true


Output $error = true if string contains value of mysql-database

php中有这样的字符串

"the quick brown fox eats yellow eggs"
"another sentence"
...

作为

的输出
foreach ($array as &$value) 
{
  //$value = "the quick brown fox eats yellow Eggs" or another one
}

,然后我有一个mysql-database

id,wort
1,fox
2,egg
...

我试过了

SELECT wort FROM table WHERE word LIKE LOWER('%".$value."%')";

的目标是仅用foreach-loop中所需的负载量来确定$value是否包含mysql-database的wort。如果是,$error = true;$error = false;

注意:

  1. 在$value中有鸡蛋,在mysql-db中有鸡蛋,它应该仍然返回一个$error = true;
  2. 有值的单词数一般要大于数据库中的单词数

由于针在数据库中,而干草堆在PHP中,因此您需要遍历数据库并将其与字符串进行比较。

试试这个:

$array=[
    "the quick brown fox eats yellow eggs",
    "another sentence"
];
$mysqli=new mysqli("127.0.0.1","root","password","database");
$result=$mysqli->query("SELECT `word` FROM `table`");
while ($row=$result->fetch_assoc()) {
    $words[]=$row['word'];
}
foreach ($array as $value) {
    if (strpos($value,$words)!==false) {
        echo $value." contains a word from the database!'n<br>";
        $error=true;
    }
}
$mysqli->close();

试试这个查询:

"SELECT word FROM table WHERE LOCATE(word, LOWER('".mysqli_real_escape_string($value)."')) <> 0 OR LOCATE(LOWER('".mysqli_real_escape_string($value)."'), word) <> 0"

您有很多字符串,您尝试查找它们是否包含数据库中的单词。在这种情况下,您必须将字符串拆分为多个单词:

  $error = false;
  foreach($someArray AS $value) {
    $words = explode(' ', $value);
    foreach($words AS $word) {
       $sql = 'SELECT * FROM table WHERE word LIKE "%'. mysqli_real_escape_string($value).'"'; // use the proper escape function here.
       if( $dbObject->query($sql)->num_rows() > 0 ) {
          $error = true;
          break;
       }
    }
    if($error) {
      break;
    }
}

您也可以尝试将数据库单词加载到数组中,然后循环遍历它们,例如:

$error = false;
foreach($wordsFromDb AS $word) {
    foreach($stringsArray as $string) {
        if(stripos($string, $word) !== false) {
          $error = true;
          break;
        }
    }
    if($error) {
       break;
    } 
}

您可以使用preg_match()代替stripos来进行更准确的比较。请注意,我没有测试这段代码,但你应该得到的想法。