Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果字符串包含mysql数据库的值,则输出$error=true_Php_Mysql - Fatal编程技术网

Php 如果字符串包含mysql数据库的值,则输出$error=true

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

我在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数据库的麦汁。如果是,$error=true;else$error=false

注:

  • $value中有egg,mysql数据库中有egg,它仍然应该返回$error=true
  • 值中的字数通常应大于数据库中的麦汁数

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

      $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过滤更快更方便