我有这个PHP代码有很多mysql_query
和or 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() );
}*/
如果您注意到有很多查询被调用。 它是一个获取所有记录并更新的游戏应用程序。 有没有办法可以清理代码。
答案 0 :(得分:2)
首先:切换到PDO或MySQLi。不再推荐使用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() );