0

名前を入力してRESTAURANTテーブルにレストランを作成したいと思います。RestaurantID(RID) は自動インクリメントです。しかし同時に、RATINGテーブルに最新の RID を追加した行を作成したいと考えていました。

他の投稿のいくつかの質問は私の場合とは異なります。この問題を解決する方法がわかりません。ここから助けを求めなければならない..

このコードのテスト結果: {"success":0,"message":"このレストランの評価テーブルを作成できませんでした!"}

レストラン名は正常に追加されましたが、評価テーブルが機能しません。何かアイデアはありますか? または、RID を評価テーブルに追加する逆の方法を実行する必要がありますか?

ここに私のコードがあります:

$response = array();  

$name = "test1"; 

if ($rid = addRestaurant($name)){
   echo "$rid"; // now it displays the right id
    if(addRating($rid) == true){
        $response["success"] = 1; 
        $response["message"] = "Restaurant Successfully Created!"; 
        echo json_encode($response); 
    }else{
        $response["success"] = 0; 
        $response["message"] = "Fail to create Rating table for this restaurant!"; 
        echo json_encode($response); 
    }
}else{
    $response["success"] = 0; 
    $response["message"] = "Fail to create Restaurant! Please Try Again Later!"; 
    echo json_encode($response); 
}

function addRestaurant($name){
// mysql inserting a new row 
    $result = mysql_query("INSERT INTO restaurants (Name)VALUES('$name')"); 

// check if row inserted or not 
    if ($result) { 
        $rid = mysql_insert_id();
        echo "$rid"; //this gives me correct RID of "84" latest one.
        return $rid;
    } else { 
        return false;
    }   
}

function addRating($rid){
            echo "$rid"; // here also the latest ID. but why return false?      
    $result = mysql_query("INSERT INTO `rating`(`Clealiness`, `Service`, `Quality`, `RID`) VALUES ('0', '0', '0', $rid");
    if ($result) {
        return true;
    } else {
        return false;
    }
?>
4

3 に答える 3

2

まず第一に、使用しないmysql_queryでください!これは廃止されており(または間もなく廃止される予定です)、SQLインジェクションの脆弱性をコードに導入するのは非常に簡単です。

代わりに、 PDOのようなライブラリを使用してください。

そこから、INSERTクエリを実行すると、最後に挿入されたIDを取得して、それを別のクエリで使用できます。

いくつかの擬似コード:

$queryObj = $dbHandler->prepare('statement');
$queryObj->execute();
$last_id = $dbHandler->lastInsertId();
$dbHandler->prepare('another statement with $last_id');
于 2013-03-16T05:21:17.633 に答える
1

簡単な作業です。

クエリが正常に実行された場合、addRestaurant コードは true を返すのではなく、最後に挿入された ID を返す必要があります。あなたは以下のようなコードでなければなりません

$response = array();  

$name = "test1"; 

if ($rid = addRestaurant($name) == true){
    if(addRating($rid) == true){
        $response["success"] = 1; 
        $response["message"] = "Restaurant Successfully Created!"; 
        echo json_encode($response); 
    }else{
        $response["success"] = 0; 
        $response["message"] = "Fail to create Rating table for this restaurant!"; 
        echo json_encode($response); 
    }
}else{
    $response["success"] = 0; 
    $response["message"] = "Fail to create Restaurant! Please Try Again Later!"; 
    echo json_encode($response); 
}

function addRestaurant($name){
// mysql inserting a new row 
    $result = mysql_query("INSERT INTO restaurants (Name)VALUES('$name')"); 

// check if row inserted or not 
    if ($result) { 
        $rid = mysql_insert_id(); //This will return the last inserted id
        return $rid;
    } else { 
        return false;
    }   
}

function addRating($rid){
    //$test = mysql_query("SELECT MAX(RID) FROM restaurants");
    //$return = mysql_fetch_assoc($test); 
    //$rid = $return['MAX(RID)'];

    $result = mysql_query("INSERT INTO rating(`Clealiness`, `Service`, `Quality`, `RID`) VALUES (0, 0, 0, $rid");
    if ($result) {
        return true;
    } else {
        return false;
    }
?>

これで問題が解決することを願っています。ありがとうございました

于 2013-03-16T05:31:44.103 に答える
0

ここでテーブルの構造が問題になります。両方のテーブルの ID の増分 ID を使用している場合は、mysqli_insert_id ( http://www.php.net/manual/en/mysqli.insert-id.php ) を使用して、最初に挿入された ID から最後に挿入された ID を取得できます。クエリ。

1) レストランを追加します 2) コードで上記のように最後の挿入 ID を選択します 3) 評価クエリに追加します

Julian H. Lam の PDO もうまく機能するので試してみてください。

于 2013-03-16T05:30:54.267 に答える