如何在php for mysql

时间:2015-09-22 02:18:47

标签: php mysql

好的,所以我必须运行2个依赖于其他ID才能正确同步的更新。

会话ID必须位于消息表中,其中MessageID必须位于会话表中。两者都是自动增量值。

mysql_query("UPDATE ow_base_user Set activityStamp = '$stamp' where id = '$profile_id' ");
    mysql_query("INSERT INTO ow_base_user_online (id, userId, activityStamp, context) VALUES ('', '$profile_id', '$stamp', '1')");

    $conid = mysql_query("SELECT ID AS id FROM ow_mailbox_conversation WHERE ID = IDENT_CURRENT") + 1;
    $msgid = mysql_query("SELECT ID AS id FROM ow_mailbox_message WHERE ID = IDENT_CURRENT") + 1;

    mysql_query("INSERT INTO ow_mailbox_conversation (id, initiatorId, interlocutorId, subject, read, deleted, viewed, notificationSent, createStamp, initiatorDeletedTimestamp, interlocutorDeletedTimestamp, lastMessageId, lastMessageTimestamp)
     VALUES ('$conid', '$profile_id', '637', 'mailbox_chat_conversation', '1', '0', '1', '0', '$stamp', '0', '0', '$msgid', '$stamp')");
    mysql_query("INSERT INTO ow_mailbox_message (id, conversationId, timeStamp, senderId, recipientId, text, recipientRead, isSystem, wasAuthorized)
     VALUES ('$msgid', '$conid', '$stamp', '$profile_id', '637', 'hi there', '0', '0', '1')");

我想可能我可以使用IDENT_CURRENT + 1来获取ID,但是当我回应时它什么都没有出现。对不起有点新鲜还可以

---编辑---

所以尝试使用insert_id - 问题然后是第一个数字没有正确回来。给了我一个几乎是应有的2倍的数字。

这是代码

mysql_query("INSERT INTO ow_mailbox_conversation (id, initiatorId, interlocutorId, subject, read, deleted, viewed, notificationSent, createStamp, initiatorDeletedTimestamp, interlocutorDeletedTimestamp, lastMessageId, lastMessageTimestamp)
VALUES ('', '$profile_id', '637', 'mailbox_chat_conversation', '1', '0', '1', '0', '$stamp', '0', '0', '', '$stamp')");
$conid = mysql_insert_id();
mysql_query("INSERT INTO ow_mailbox_message (id, conversationId, timeStamp, senderId, recipientId, text, recipientRead, isSystem, wasAuthorized)
VALUES ('', '$conid', '$stamp', '$profile_id', '637', 'hi there', '0', '0', '1')");
$msgid = mysql_insert_id();
mysql_query("UPDATE ow_mailbox_conversation Set lastMessageId = '$msgid' where id = '$conid' ");

---编辑---

这里是我的完整代码,除了Convarsation字符串没有插入外,一切似乎都正常工作,然后$ conid在调试中回来真的很高。

$link = mysql_connect($OW_DB_HOST, $OW_DB_USER, $OW_DB_PASS);
if (!$link) {
    die('Connection fail: ' . mysql_error());
}
mysql_select_db($OW_DB_NAME, $link);
// End of connection database

$stamp = time(); 

//1
mysql_query("UPDATE ow_base_user Set activityStamp = '$stamp' where id = '$profile_id' ");
mysql_query("INSERT INTO ow_base_user_online (id, userId, activityStamp, context) VALUES ('', '$profile_id', '$stamp', '1')");


$receiver_id = '637';

mysql_query("INSERT INTO ow_mailbox_conversation (id, initiatorId, interlocutorId, subject, read, deleted, viewed, notificationSent, createStamp, initiatorDeletedTimestamp, interlocutorDeletedTimestamp, lastMessageId, lastMessageTimestamp)
VALUES ('', '$profile_id', '$receiver_id', 'mailbox_chat_conversation', '1', '0', '1', '0', '$stamp', '0', '0', '', '$stamp')");
$conid = mysql_insert_id();

mysql_query("INSERT INTO ow_mailbox_message (id, conversationId, timeStamp, senderId, recipientId, text, recipientRead, isSystem, wasAuthorized)
VALUES ('', '$conid', '$stamp', '$profile_id', '$receiver_id', 'hi there', '0', '0', '1')");
$msgid = mysql_insert_id();

mysql_query("INSERT INTO ow_mailbox_last_message (id, conversationId, initiatorMessageId, interlocutorMessageId)
VALUES ('', '$conid', '$msgid', '0')");
$lastmsgid = mysql_insert_id();

mysql_query("UPDATE ow_mailbox_conversation Set lastMessageId = '$lastmsgid' where id = '$conid' ");

//End of script if devmode = false

// Output all used variables on devmode = true
if (DEVMODE){
    echo 'Connection ok';echo '<br>';
    echo '1 = ',$conid;echo '<br>';
    echo '2 = ',$msgid;echo '<br>';
    echo '3 = ',$lastmsgid;echo '<br>';

}

// End of testbench

mysql_close($link);
?>

3 个答案:

答案 0 :(得分:0)

如果使用PDO进行连接,可以使用PDO :: lastInsertId获取最后插入行的id。请参考: http://php.net/manual/en/pdo.lastinsertid.php

替换, http://php.net/manual/en/mysqli.insert-id.php

答案 1 :(得分:0)

您无法确定下一个插入ID,因为您的系统将(我假设)一次处理多个Feed,因为您的网站不是单用户

最好的办法是使用三个查询:

  1. 插入表1并检索ID(id1)
  2. 插入表2(存储id1)并检索新ID(id2)
  3. 更新表1(记录ID id1)以在相关字段中存储id2
  4. 为此,我建议使用InnoDB表和事务。如果发生故障,您可以回滚到任何开始之前的状态,并最小化存在的未附加的ID。

    另一种方法是创建第三个表来存储表之间的关系。从本质上讲,它存储了id1和id2,而没有其他

    如果可能,请重新处理表,以便不需要此相互引用。从长远来看,这将使事情变得更容易

    最后,停止使用mysql_功能。它们在PHP 7中被弃用并完全删除。使用PDOmysqli_函数。你好,谢谢我

答案 2 :(得分:0)

问题是结构错误

这是固定代码。

    mysql_query("INSERT INTO ow_mailbox_conversation (id, initiatorId, interlocutorId, subject, `read`, deleted, viewed, notificationSent, createStamp, initiatorDeletedTimestamp, interlocutorDeletedTimestamp, lastMessageId, lastMessageTimestamp)
VALUES ('', $profile_id, $receiver_id, 'mailbox_chat_conversation', 1, 0, 1, 0, $stamp, 0, 0, '', $stamp)");
$conid = mysql_insert_id();

注意已删除的&#39; &#39;围绕数字和变量。