0

そのため、各ユーザー名に固有のヒット カウンターを作成しようとしています。

ユーザー名がデータベースにない場合、ユーザー名と呼ばれるフィールドにユーザー名を挿入し、クリック数として1をクリックと呼ばれるものに挿入するようにしようとしています。

ユーザー名が既に存在する場合は、既存のクリック値に 1 つ追加します。大文字と小文字を区別しないようにしています。しかし、うまくいかないようです!

  $query = mysql_query("SELECT * FROM clicks WHERE username='$ytusernamecheck'");

  $numrows = mysql_num_rows($query);

  if ($numrows < 0)  
  {
      mysql_query("INSERT INTO clicks (username, clicks)
                                      VALUES ('$ytusernamecheck', 1)");
      echo $numrows;

  }
  else{}
4

3 に答える 3

1

この行には 2 つの誤りがあります。

if ($numrows = '')  
  1. =値を比較するのではなく (==または)割り当てます ( ===)。

  2. mysql_num_rows()空の文字列ではなく、整数を返します。

最終結果は次のようになります。

if ($numrows === 0)  

参考までに、新しいコードでは関数を使用しないでくださいmysql_*。それらはもはや保守されておらず、公式に廃止されています。赤いボックスが見えますか? 代わりに準備済みステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

于 2013-05-26T17:33:00.563 に答える
0

おそらく行うべきことは、一意のインデックスを作成しusername、代わりにthisを使用することです。

-- first do: CREATE UNIQUE INDEX ix_clicks ON clicks(username);

INSERT INTO clicks VALUES ('username', 1)
  ON DUPLICATE KEY UPDATE clicks = clicks + 1;

データベースへの追加のクエリなしで、1 回の操作で挿入/更新を行います。

でテストする SQLfiddle

于 2013-05-26T17:38:05.447 に答える
0

ユーザー名フィールドに一意のキーを設定して、代わりにこれを使用しないのはなぜですか

mysql_query("INSERT INTO clicks (username, clicks) VALUES ('$ytusernamecheck', 1) 
on duplicate key update clicks=clicks+1");

そのように実行する SQL ステートメントは 1 つだけです

于 2013-05-26T17:38:14.623 に答える