0

我想通过输入名称在RESTAURANT表中创建一家餐厅。RestaurantID(RID) 是自动递增的。但同时,我想在RATING表中创建一个包含最新添加的 RID 的行。

其他帖子中的几个问题与我的情况不同,我不知道如何解决这个问题。不得不从这里寻求帮助..

这段代码的测试结果是:{"success":0,"message":"Fail to create Rating table for this restaurant!"}

餐厅名称已成功添加,但评分表不起作用。有什么想法吗?还是我应该反过来将 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询问。

1) 添加餐厅 2) 选择您的最后一个插入 id,如上面在您的代码中所做的 3) 附加到您的评分查询

试试 Julian H. Lam 的 PDO,因为它也很有效。

于 2013-03-16T05:30:54.267 回答