我在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;
注意:
答案 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"