PHP mysql我寻找良好的格式,消除凌乱的代码

时间:2012-09-10 10:09:13

标签: php mysql

我有这个PHP代码有很多mysql_queryor die ( mysql_error() )

我怎样才能减少mysql_query,或者我的代码真的需要或者死(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 个答案:

答案 0 :(得分:2)

首先:切换到PDOMySQLi。不再推荐使用mysql函数。从PHP手册:

  

不鼓励使用此扩展名(mysql)。相反,MySQLi或   应该使用PDO_MySQL扩展名。

在实际清理代码方面,您应该研究Don't Repeat Yourself的概念。常用操作(连接,查询等)的包装类将帮助您清理一些东西。创建自己的包装器类是一种很好的学习方法,它可以帮助您抽象出大多数常见的数据库查询。

答案 1 :(得分: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,或者我的代码真的需要或者死(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'

但是在玩这种遗留代码之前不要忘记备份。这些代码有很多年的经验。可能有很多bug修复。你肯定不想打破它。

答案 2 :(得分:0)

除非你想开始牺牲你的错误处理或减少你正在使用的查询数量,否则你不能。看看只是用更多的换行清理代码库,或者转向MVC样式以有效地将每个数据库查询抽象为自己的函数。

答案 3 :(得分: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() );