0

一部のコードは、データの選択から始まり、挿入する行番号が0であるかどうかを確認してから、通常のプロセスを続行します。select問題は、通常のプロセスが、の前に格納されていたために存在しないステートメントに依存していることinsertです。ajaxやhtmlに関連するものを使用せずに、PHP内でデータリクエストを更新するにはどうすればよいですか?説明する例を次に示します。

$user = $_GET['user']; // not stored user
$select = mysql_query("SELECT * FROM `table` WHERE username = ".$user);
$row = mysql_fetch_array($select);
$rownum = mysql_num_rows($select);
if(!$rownum){
     mysql_query("INSERT INTO table (username, something) VALUES ('$user', 1)");
}

/* Here comes the problem */
if($row['something'] == 0){
   die("Not found !"); // THIS if returns true since it was not found at first place before inserting 
                      // i want it to refresh the $select data so it could be read as 1

}

私がこれまでに解決した方法は、ステートメントの下の$select$rowコードを繰り返し使用することですinsert

if(!$rownum){
     mysql_query("INSERT INTO table (username, something) VALUES ('$user', 1)");
}
$select = mysql_query("SELECT * FROM `table` WHERE username = ".$user);
$row = mysql_fetch_array($select);
   [..]

これを行うためのより簡単な方法が欲しい

4

1 に答える 1

1

新しく作成されたレコードの内容がわかっている場合は、新しい配列 $row=array('username'->'bob', ...); を作成するだけです。

ただし、テーブルにデフォルト値がある場合、または後で他の値を追加する場合は、2 番目の選択を行う必要があります。

$user=urldecode($_GET['user']);
$result=mysql_query("SELECT * FROM `table` WHERE username='".mysql_real_escape_string($user)."'");
if(!$result) die("SQL ERROR");

if(mysql_num_rows($result)>0)
{
    $row = mysql_fetch_array($select);
}
else
{
    mysql_query("INSERT INTO table (username, something) VALUES ('".mysql_real_escape_string($user)."', 1)");

    $result=mysql_query("SELECT * FROM `table` WHERE username='".mysql_real_escape_string($user)."'");
    if(!$result) die("SQL ERROR");
    if(mysql_num_rows($result)==0) die("MAJOR ERRORS IN SQL");

    $row = mysql_fetch_array($result);
}

これはクエリを実行した結果であるため、 $result を使用することをお勧めします。

于 2012-07-10T15:56:50.363 に答える