2

mysql_query私はたくさんのとを持っているこのphpコードを持っていますor die ( mysql_error() )

mysql_queryを減らすにはどうすればよいですか、またはor die(mysql_error())は本当に私のコードに必要ですか?

ここにコードを貼り付けます。

$sqlScore = "UPDATE game SET currentTurn = '1', remainingTiles='".$remainingTiles."' WHERE gameID = '".$gameID."'";
mysql_query( $sqlScore ) or die ( mysql_error() );

$ScoreSelect = set_mysql( "SELECT * FROM game WHERE gameID = '".$gameID."'" );
$up_gameID = $ScoreSelect['gameID'];
$set_p1 = $ScoreSelect['player1'];

// CHECK IF GAMEID EXIST FOR SCORE
$checkData = mysql_query( "SELECT * FROM score WHERE gameID = '".$gameID."' " ) or die ( mysql_error() );
$rcd = mysql_fetch_array( $checkData );
$rcd['gameID'] == $gameID 
? mysql_query( "UPDATE score SET score = '".$score."' WHERE gameID = '".$gameID."' " ) or die ( mysql_error() ) 
: mysql_query( "INSERT INTO score VALUE( '', '".$gameID."', '".$player1."', '".$score."')" ) or die ( mysql_error() );

// INSERT SQL WORD DATA
$sqlWD = mysql_query( "INSERT INTO word_data VALUE( '', '".$gameID."', '', '".$worddata."')" ) or die ( mysql_error() );

// CHECK FOR TILE
$sqlCheckRow = mysql_query( "SELECT * FROM wctilerack WHERE gameID = '".$up_gameID."' AND email = '".$up_email_player1."' " ) or die ( mysql_error() );
if ( mysql_num_rows( $sqlCheckRow ) == "1" ) {
    // INSERT wctilerack
    $sqlTileUP = mysql_query( "UPDATE wctilerack SET tiles = '$playerRack' WHERE gameID = '".$up_gameID."' AND email = '".$up_email_player1."' ") or die ( mysql_error() );
} else {
    // INSERT wctilerack
    $sqlTileINSERT = mysql_query( "INSERT INTO wctilerack VALUE('', '".$up_gameID."', '".$up_email_player1."', '$playerRack' ) ") or die ( mysql_error() );
}

// UPDATE lastPlayed
$sqlUpdatePlayed = mysql_query( "UPDATE user SET lastPlayed=NOW() WHERE email = '$up_email_player1' " ) or die ( mysql_error() );
// UPDATE word
$sqlUpdateWord = mysql_query( "UPDATE game SET lastWord = '".$xword[2]."', lastPoints='".$score."' WHERE gameID = '$up_gameID' " ) or die ( mysql_error() );
//$sqlInsertWord = mysql_query( "INSERT INTO word_data VALUE( '', '".$up_gameID."', '', '".$xword[2]."' )" ) or die ( mysql_error() );
/*$sqlCheckSK = mysql_query( "SELECT * FROM gameTileSkins WHERE gameID = '$gameID' AND email = '$up_email_player1' " ) or die ( mysql_error() );
if ( mysql_num_rows( $sqlCheckSK ) == '1' ) {
    $skUP = mysql_query( "UPDATE gameTileSkins SET tileSkin='$tileSkinID' WHERE gameID = '$gameID' AND email = '$up_email_player1' " ) or die ( mysql_error() );
} else {
    // INSERT gameTileSkins
    $sqlSK = mysql_query( "INSERT INTO gameTileSkins VALUE('', '$gameID', '$up_email_player1', '$tileSkinID')" ) or die ( mysql_error() );
}*/

呼び出されたクエリがたくさんあることに気付いた場合。すべてのレコードをフェッチして更新するゲームアプリケーションです。コードをクリーンアップする方法はありますか。

4

4 に答える 4

1

このコードが機能していて、何年にもわたるバグ修正が行われている場合は、できるだけ変更しないでください。コードを grep して「mysql_query」呼び出しを見つけることをお勧めします。そして、最初に同様の関数に置き換えます。

mysql_query( some text here ) or die(mysql_error());

に置き換える必要があります

handle_query( some text here )

handle_query関数は次のように定義する必要があります

function handle_query($query){
    mysql_query( $query) or die(mysql_error());
}

その後、テストを実行します。すべてがうまくいけば。handle_query関数本体を変更します。

どうすれば mysql_query を減らすことができますか、またはコードに or die ( mysql_error() ) が本当に必要ですか?

sed/grep を使用できます。コードが含まれていると仮定すると、junk_code.phpこのコマンドを使用してそれらを読み取ることができますor die (mysql_error())

sed 's/mysql_query/handle_query/g'  junk_code | sed 's/\s*or\s*die\s*(\s*mysql_error(\s*)\s*)\s*//g'

ただし、そのようなレガシー コードを使用する前に、バックアップを取ることを忘れないでください。これらのコードには長年の経験があります。多くのバグ修正が含まれている可能性があります。あなたは確かにそれを壊したくありません。

于 2012-09-10T10:16:44.773 に答える
0

エラー処理を犠牲にしたり、使用しているクエリの数を減らしたりしない限り、できません。改行を増やしてコード ベースをクリーンアップするか、MVC スタイルに移行して、各データベース クエリを独自の関数に効果的に抽象化することを検討してください。

于 2012-09-10T10:12:05.910 に答える
0
// CHECK IF GAMEID EXIST FOR SCORE
$checkData = mysql_query( "SELECT * FROM score WHERE gameID = '".$gameID."' " ) or die ( mysql_error() );
$rcd = mysql_fetch_array( $checkData );
$rcd['gameID'] == $gameID 
? mysql_query( "UPDATE score SET score = '".$score."' WHERE gameID = '".$gameID."' " ) or die ( mysql_error() ) 
: mysql_query( "INSERT INTO score VALUE( '', '".$gameID."', '".$player1."', '".$score."')" ) or die ( mysql_error() );

$sqlCheckRow = mysql_query( "SELECT * FROM wctilerack WHERE gameID = '".$up_gameID."' AND    email = '".$up_email_player1."' " ) or die ( mysql_error() );
if ( mysql_num_rows( $sqlCheckRow ) == "1" ) {
// INSERT wctilerack
$sqlTileUP = mysql_query( "UPDATE wctilerack SET tiles = '$playerRack' WHERE gameID = '".$up_gameID."' AND email = '".$up_email_player1."' ") or die ( mysql_error() );
} else {
// INSERT wctilerack
$sqlTileINSERT = mysql_query( "INSERT INTO wctilerack VALUE('', '".$up_gameID."', '".$up_email_player1."', '$playerRack' ) ") or die ( mysql_error() );
}

これらのコードの代わりに、ON DUPLICATE KEY 構文を使用して (挿入/更新) の単一のクエリを作成できます。

eg:     mysql_query("INSERT INTO score VALUES ('', '".$gameID."', '".$player1."', '".$score."') ON DUPLICATE KEY UPDATE score = '".$score."'") or die ( mysql_error() );
于 2012-09-10T10:21:05.943 に答える