Php 如果字符串包含mysql数据库的值,则输出$error=true
我在php中有这样的字符串Php 如果字符串包含mysql数据库的值,则输出$error=true,php,mysql,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 t
"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数据库的麦汁。如果是,$error=true;else$error=false
注:
您有很多字符串,并尝试查找它们是否包含数据库中的单词。 在这种情况下,您必须将字符串拆分为多个单词:
$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
。
请注意,我没有测试这段代码,但您应该了解这一点。因为您的指针在数据库中,而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();
$array=[
“敏捷的棕色狐狸吃黄色的蛋”,
“另一句话”
];
$mysqli=newmysqli(“127.0.0.1”、“root”、“password”、“database”);
$result=$mysqli->query(“从`table`中选择`word`”);
而($row=$result->fetch_assoc()){
$words[]=$row['word'];
}
foreach($array作为$value){
if(strpos($value,$words)!==false){
echo$value.“包含数据库中的一个单词!\n
”;
$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"
“从表中选择单词,其中LOCATE(单词,较低(“.mysqli\u real\u escape\u字符串($value)。”)0或LOCATE(较低(“.mysqli\u real\u escape\u字符串($value)。”),word)0”
@Ohgodwhy“从表格
中选择麦汁,其中单词
类似于较低的(“%.”$value.“%”);您知道和$value
在代码中的作用吗。你的foreach循环中到底是什么?请添加转义,否则您将容易受到SQL注入的攻击…@Sven wovon redest du?请坚持用英语-并查看您的帖子。@Sven Ich kann dir nicht folgen@Sven-您不应该编辑我的答案。那里的一切都是一个例子。我不知道他正在使用什么样的数据库或数据库扩展,我只是向他展示了正确的指针,他的工作是使用正确的函数来清理数据。请随意恢复编辑。如果您可以添加某种转义函数调用,而不是仅在注释中提及它,那就太好了。@Sven-我不知道他使用的是什么db引擎/扩展名。让我们保持原样,我现在不介意。这应该比使用PHP过滤更快更方便