-2

我在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数据库

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

我试过了

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

目标是仅确定 foreach 循环中所需的负载量,$value 是否包含 mysql-database 的麦芽汁。如果是,$error = true; 否则$错误=假;

笔记:

  1. 在 $value 中有 Eggs,在 mysql-db 中有 egg,它仍然应该返回一个 $error = true;
  2. 值中的单词数通常应大于数据库中的麦芽汁数。
4

3 回答 3

1

由于您的指针在数据库中,而干草堆在 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();
于 2013-05-02T22:10:38.813 回答
0

试试这个查询:

"SELECT word FROM table WHERE LOCATE(word, LOWER('".mysqli_real_escape_string($value)."')) <> 0 OR LOCATE(LOWER('".mysqli_real_escape_string($value)."'), word) <> 0"
于 2013-05-02T22:12:39.467 回答
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;
    } 
}

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

于 2013-05-02T22:08:02.320 回答