0

我正在尝试使用一个单词在数组中出现的次数来更新数据库。如果 strpos 只有一次,我发现它可以作为一个函数工作 - 但是如果单词('example')被使用了三次,我希望返回的值是 3 - 而不是 'true'。

我当前的代码:

$count = mysql_real_escape_string($_POST['item_name']);

    if (strpos($count,'example') !== false) {

    mysql_query("UPDATE table SET value = value + 1 WHERE id = '1'");

    if (!mysql_query($sql)) {
        error_log(mysql_error());
        exit(0);
        }
    }

我知道我的做法是错误的,但正确的方法是什么?谢谢!

4

3 回答 3

0

preg_match_all查找给定字符串中的所有模式匹配项,如果没有找到则返回 false。

$matches = array(); // Not Used
$count = implode('_',$yourArrayHere, $matches); // Compresses array to one big string
$found = preg_match_all('/example/', $count); // Searches that string.
if($found !== false && $found > 0) {
  mysql_query("UPDATE table SET value = value + ".(int)$found." WHERE id = '1'");
}
于 2012-11-13T19:00:49.300 回答
0

怎么样:

$map = array();

for($array as $key)
{
    if(isset($map[$key]))
    {
        $map[$key] = $map[$key] + 1;
    }
    else
    {
        $map[$key] = 1;
    }
}
于 2012-11-13T19:01:03.087 回答
0

preg_match_all() 应该给你你正在寻找的答案。

$itemName = preg_quote(implode(' ', $_POST['item_name']));

$searchWord = 'example';
$numMatches = preg_match_all("/\b$searchWord\b/", $matches); //$matches is filled with the results

mysql_query("UPDATE table SET value = value + $numMatches WHERE id = '1'");

我不确定您为什么在示例中调用 mysql_real_escape_string() 。$itemName 永远不会注入到 SQL 中,因此没有必要让它成为 SQL 安全的。我用 preg_quote() 替换了转义调用,它转义了正则表达式的特殊字符。

于 2012-11-13T19:09:24.463 回答