使用PHP递归地更新SQL表

时间:2014-10-10 15:34:13

标签: php mysql sql database

我有一个会话表和会话回复表:

对话表:

+-------+-------+--------+
| cid   | u_1   | uid_2  |
+-------+-------+--------+
| 1     | 8     | 3      | 
| 2     | 8     | 5      |  
| 3     | 8     | 2      | 
+-------+-------+--------+

conversation_reply table:

+-------+-------+--------+--------+
| cr_id | reply | uid_fk | cid_fk |
+-------+-------+--------+--------+
| 1     |       | 8      | 1      |
| 2     |       | 8      | 11     |   
| 3     |       | 8      | 11     | 
+-------+-------+--------+--------+

如果在创建新回复时不存在新记录,我需要能够使用新记录更新会话表,但是我收到以下错误:

Cannot add or update a child row: a foreign key constraint fails
(`_db`.`conversation_reply`, CONSTRAINT `conversation_reply_ibfk_2` 
FOREIGN KEY (`cid_fk`) REFERENCES `conversation` (`cid`))

任何帮助都非常感谢!!!!

修改

我已将convo回复查询放入创建新的convo查询中,它会创建一个新的convo,但仍然没有插入回复:

if (!empty($_GET['conv_id'])) {

        $cid = mysql_real_escape_string($_GET['conv_id']);
            echo $cid;

    }


if($user_one!=$user_two){

// Check convo doesn't already exist.

$q_exist= mysql_query("SELECT c_id FROM mc_conversation WHERE (user_one='$user_one' and user_two='$user_two') or (user_one='$user_two' and user_two='$user_one') ") or die(mysql_error());

if(mysql_num_rows($q_exist)==0) { 
    $query = mysql_query("INSERT INTO mc_conversation (user_one,user_two,ip,time) VALUES ('$user_one','$user_two','$ip','$time')") or die(mysql_error());
    $q=mysql_query("SELECT c_id FROM mc_conversation WHERE user_one='$user_one' ORDER BY c_id DESC limit 1");
    $v=mysql_fetch_array($q);
    return $v['c_id'];
    $v_cid = $v['c_id'];

    // Insert reply.

    $qR= mysql_query("INSERT INTO mc_conversation_reply (user_id_fk,reply,ip,time,c_id_fk) VALUES ('$uid','$reply','$ip','$time','$v_cid')") or die(mysql_error());


// Convo already exists.

} else {


    $v=mysql_fetch_array($q_exist);
    return $v['c_id'];

   // Insert reply

    $qR= mysql_query("INSERT INTO mc_conversation_reply (user_id_fk,reply,ip,time,c_id_fk) VALUES ('$uid','$reply','$ip','$time','$cid')") or die(mysql_error());

    echo $cid;

}

}

2 个答案:

答案 0 :(得分:0)

你打电话给"返回"在您的else循环中,它将结束函数的执行,或者如果从全局范围调用,则执行当前脚本。 http://php.net/manual/en/function.return.php 试试这个:

// Insert reply
 $v=mysql_fetch_array($q_exist);
 $qR= mysql_query("INSERT INTO mc_conversation_reply (user_id_fk,reply,ip,time,c_id_fk) VALUES ('$uid','$reply','$ip','$time','$cid')") or die(mysql_error());
 echo $cid;

答案 1 :(得分:0)

根据您发布的代码,我认为问题出在 return 语句中。

由于您有

,因此未插入回复
return $v['c_id'];
INSERT查询代码之前的

。如果此代码在函数内部,它将只返回值而不执行任何其他行。

在执行所有必需的操作之后,您应该在函数的最后部分使用return语句。如果是出于调试目的,您可以使用 echo 语句。