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

2

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

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

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

于 2012-09-10T10:13:52.807 回答
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 语法编写一个查询 for(insert/update)。

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 回答