2011-11-27 164 views
0

我在游戏脚本(php)上有这段代码。这将检查玩家是否有装备的车辆,并且它仍然存在。我的代码:如何使用JOIN从PHP查询MySQL?

if ($rs[vehicle] != 0) { 
    $sql_result2 = mysql_query("SELECT * FROM vehicles WHERE id='$rs[vehicle]'", $db); 
    if (mysql_num_rows($sql_result2) == 0) { mysql_query("UPDATE mobsters SET vehicle = 0 WHERE id ='$id'"); } 
} 

我想编辑该代码,这样,如果它确实存在,它也将检查db_vehicles表,找出所述车辆(名称,速度等)的细节。一个马虎的做法是:

if ($rs[vehicle] != 0) { 
    $sql_result2 = mysql_query("SELECT * FROM vehicles WHERE id='$rs[vehicle]'", $db); 
    if (mysql_num_rows($sql_result2) == 0) { 
     mysql_query("UPDATE mobsters SET vehicle = 0 WHERE id ='$id'"); 
     } else { 
     $ = mysql_fetch_array($sql_result2); 
     $sql_result3 = mysql_query("SELECT * FROM db_vehicles WHERE id='$[type]'", $db); 
     $ = mysql_fetch_array($sql_result3); 
     $name = $[name]; $speed = $[speed]; 
     } 
    } 

显然我想这样做与JOIN使用尽可能少的查询。我应该使用什么样的连接?

+0

你的代码很容易SQL注入;请使用PDO并准备好查询。 – mc10

+0

我不明白这是什么意思 – user1022585

回答

1

您的代码应该只使用一个select语句,另一个用于更新,这是选择以加盟:

$sql_result3 = mysql_query("Select dbv.Name, dbv.speed, dbv.type 
          from db_Vehicles dbv inner join vehicles v 
          on v.id = dbv.id WHERE dbv.id='$rs2[type]'" 
          , $db); 

BTW为@ MC10说你的代码很容易受到SQL注入,所以你会发现很多的东西这里在SO关于如何防止它像ThisThis

+0

然后'if(mysql_num_rows($ sql_result3)== 0){mysql_query(“UPDATE mobsters SET vehicle = 0 WHERE id ='$ id'”); }'? – user1022585

+0

是的,你不能在一个语句中完成这两件事情,所以你需要两个不同的sql语句。 –