2011-11-27 25 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); 

ところでMC10は、あなたがものをたくさん見つかりますので、あなたのコードは、SQLインジェクションの傾向があると述べた@としてここでそれを防ぐ方法についてはThisThis

+0

そして 'if(mysql_num_rows($ sql_result3)== 0){mysql_query(" UPDATE mobsters SET vehicle = 0 WHERE id = '$ id' "); } '?? – user1022585

+0

はい、1つのステートメントで2つのことを行うことはできませんので、2つの異なるSQLステートメントが必要です。 –

関連する問題