2014-10-10 29 views
0

我有一个谈话表和会话回应表:SQL更新表递归用PHP

谈话表:

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

conversation_reply表:

+-------+-------+--------+--------+ 
| 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`)) 

任何帮助非常感谢!

编辑

我已经把康沃回复查询到创造新的康沃查询时,它会创建一个新的康沃,但仍然不插入回复:

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; 

} 

}

+3

您需要先创建父记录。例如首先插入'会话',然后插入回复表。 – 2014-10-10 15:35:08

+0

谢谢,由于某种原因,当我这样做时,会话被创建,但答复不会被创建... – user43251 2014-10-10 15:37:10

+0

我添加了更多代码.. – user43251 2014-10-13 09:42:30

回答

0

您在else循环中调用了“return”,它将结束函数的执行,或者如果从全局作用域调用,则执行当前脚本。 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; 
+0

谢谢!多么愚蠢的错误!摆脱了一个回报,转移另一个,似乎现在工作!谢谢! – user43251 2014-10-13 09:49:36

+0

不用担心。轻松完成。只要记住总是在函数的结尾处放置返回值(或者在您为其停止执行而感到高兴的地方,例如在if/else语句的末尾)。 – gazareth 2014-10-13 09:52:41

0

从已公布,我认为这个问题是与回报语句的代码。

的回复是没有得到插入,因为你插入查询代码之前有

return $v['c_id']; 

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

在完成所有必需的操作之后,您应该在函数的最后有return语句。如果是用于调试目的,则可以使用echo声明。

+0

感谢您的帮助,这是事实,但加扎雷思首先发现它!不过谢谢,你也是对的! – user43251 2014-10-13 09:50:57

+0

嘿它没关系,当我打字时,没有人指出这个错误。我猜gazza也在同时打字:)当我打入时,我就像是WOW的答案已经发布。很高兴你得到了你需要的东西。 – Dharam 2014-10-13 09:52:45