如果string包含mysql-database的值,则输出$ error = true

时间:2013-05-02 21:54:02

标签: php mysql

我在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; else $ error = false;

注意:

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

3 个答案:

答案 0 :(得分:1)

由于你的针在数据库中,而haystack在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();

答案 1 :(得分: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()进行更准确的比较。 请注意,我没有测试此代码,但您应该明白这一点。

答案 2 :(得分: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"