0

単語が配列に含まれる回数でデータベースを更新しようとしています。strposが1回だけの場合は関数として機能することがわかりましたが、単語('example')が3回使用された場合、返される値は'true'ではなく3-になります。

私の現在のコード:

$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()は、あなたが探している答えを与えるはずです。

$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 に答える
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 に答える