2012-04-28 14 views
1

私のスクリプトには、お互いの後に使用する必要がある3つのmysql_queryがあります。チケットを予約するスクリプトを作成する際に、ステータスを "=いいえ"から "はい"スクリプトは、ユーザがHTMLフォームに入力したチケットの数をカウントします。これは、サーバー側に= $ticketsというチケット数の変数を与えます。php mysqlフェッチステートメントフェッチ問題

ヒント:このようなモデルはので、ここでのMySQLインジェクションセキュリティ

の必要は私のコードではありません。

//get ticket status 
    $eventTicket = mysql_query("SELECT eventTickets FROM beventreservation WHERE eventId = '$eventId'") or die(mysql_error()); 
    $ticketrow = mysql_fetch_array($eventTicket) or die(mysql_error()); 


    //test... which is working ! 
    echo $ticketrow['eventTickets']; 


    //get classId from classes 
    $selectClass = mysql_query("SELECT classId FROM quotaclasses WHERE className = '$classes' AND eventFK = '$eventId'") or die (mysql_error());  

    $classrow = mysql_fetch_array($selectClass) or die(mysql_error()); 

    //this var is to define which class the user used 
    $choosedClass = $classrow['classId']; 

//test ... which did not work !!! 
echo $classrow['classId']; 

     if ($ticketrow['eventTickets'] == "Yes") 

    { 
     for($counter=1;$counter<$numberOfTickets;$counter++) 

     { 
      $bookTicket = mysql_query("UPDATE unites SET ticketSold = 'Yes' WHERE businessreservationIdFk = '$eventId' AND classIDfk ='$choosedClass'") or die(mysql_error()); 
      echo "ticket ". $counter . " done !"; 


     } 

    } 

スクリプトは、この構文をフェッチせず、エラーはありません私のページに掲載されました!私は、この構文の後に変数$ticketsをエコーし​​ようとした、それは現れなかった

$classrow = mysql_fetch_array($selectClass) or die(mysql_error()); 

も、同じスクリプトのページにするmysql_queryよりも多くをフェッチする問題がありますか?ここで私が間違ってどこに行けばいいのか教えてください。

答えて

4

mysql_fetch_*()コールと一緒にdie()を呼び出しないでください。返される行がない場合、mysql_fetch_array()FALSEを返します。これにより、エラーがなくてもdie()がトリガーされ、スクリプトが強制終了されます。 mysql_query()コールですでに$selectClassのエラーチェックを行っていないので、成功したことがわかります。

// This query returned no rows, but was successful syntactically and functionally. 
$selectClass = mysql_query("SELECT classId FROM quotaclasses WHERE className = '$classes' AND eventFK = '$eventId'") or die (mysql_error());  

代わりに、テストの行が返された場合:

if (mysql_num_rows($selectClass) > 0) { 
    // Fetch and do other stuff 
    $classrow = mysql_fetch_array($selectClass); 
    $choosedClass = $classrow['classId']; 
    // etc... 
    // etc... 
} 
else { 
    // Do whatever you need to do if no rows return 
}