Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php for mysql中获取next autoincrements的值_Php_Mysql - Fatal编程技术网

如何在php for mysql中获取next autoincrements的值

如何在php for mysql中获取next autoincrements的值,php,mysql,Php,Mysql,好的,所以我必须运行2个更新,它们依赖于彼此的ID来正确同步 对话ID必须在消息表中,其中as 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

好的,所以我必须运行2个更新,它们依赖于彼此的ID来正确同步

对话ID必须在消息表中,其中as 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);
?>
$link=mysql\u connect($OW\u DB\u HOST、$OW\u DB\u USER、$OW\u DB\u PASS);
如果(!$link){
die('连接失败:'.mysql_error());
}
mysql\u select\u db($OW\u db\u NAME,$link);
//连接结束数据库
$stamp=time();
//1
mysql_查询(“更新ow_base_用户集activityStamp='$stamp',其中id='$profile_id');
mysql_查询(“插入ow_base_user_online(id、userId、activityStamp、context))值(“''$profile_id','$stamp','1');
$receiver_id='637';
mysql_查询(“插入ow_邮箱_会话(id、initiatorId、对话者id、主题、读取、删除、查看、通知发送、createStamp、initiatorDeletedTimestamp、对话者DeletedTimestamp、lastMessageId、lastMessageTimestamp)
值(“'$profile\u id',“$receiver\u id”,“mailbox\u chat\u conversation”,“1”,“0”,“0”,“$stamp”,“0”,“0”,“$stamp”));
$conid=mysql_insert_id();
mysql_查询(“插入ow_邮箱_邮件(id、conversationId、时间戳、senderId、recipientId、文本、recipientRead、isSystem、wasAuthorized))
值(“'$conid'、'$stamp'、'$profile_id'、'$receiver_id'、'hi there'、'0'、'0'、'1');
$msgid=mysql_insert_id();
mysql_查询(“插入ow_邮箱_最后一条_消息(id、conversationId、initiatorMessageId、InterlocurMessageID))
值(“'$conid','$msgid','0');
$lastmsgid=mysql\u insert\u id();
mysql_查询(“更新ow_邮箱_会话集lastMessageId='$lastmsgid',其中id='$conid');
//如果devmode=false,则结束脚本
//在devmode=true上输出所有使用的变量
if(DEVMODE){
回显“连接正常”;回显“
”; echo“1=”,$conid;echo“
”; echo“2=”,$msgid;echo“
”; echo“3=”,$lastmsgid;echo“
”; } //试验台末端 mysql_close($link); ?>
如果使用PDO进行连接,则可以使用PDO::lastInsertId获取最后插入行的id。请参阅:

备选方案,
您无法确定下一个插入ID,因为您的系统(我假设)将同时处理多个提要,因为您的站点不是单个用户

最好使用三个查询:

  • 插入表1并检索ID(id1)
  • 插入表2中(存储id1)并检索新ID(id2)
  • 更新表1(记录ID id1)以将id2存储在相关字段中
  • 为此,我建议使用InnoDB表和事务。在发生故障时,您可以回滚到任何启动之前的状态,并最小化未连接的ID

    另一种方法是创建第三个表来存储表之间的关系。本质上,它只存储id1和id2,而不存储其他内容

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


    最后,停止使用
    mysql\u
    函数。它们在PHP7中被弃用并完全删除。使用
    PDO
    mysqli
    功能。你会感谢我的

    问题是结构错误

    这是固定代码

        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();
    

    请注意,在数字和变量周围删除了“”

    我以为insert ID只有在查询更新运行后才起作用?在它运行之前我需要ID。不过我会仔细阅读你发来的邮件。非常感谢你提供的信息。。但此服务器当前未使用php7。无法按enter键输入新行。。。哦,好吧。。我已经解决了我的问题,只是一些简单的错误。。现在一切都正常了。问题是,
    mysql\u
    函数已经被弃用了一段时间,最好的办法是转到PDO或
    mysqli\u
    。使用这两种方法中的任何一种都将使您能够使用预先准备好的语句,从而消除转义传递数据的需要。PDO还为您提供了一个抽象层,因此,如果您决定迁移到另一个DB平台,它将使事情变得更简单。我发现PDO更容易相处,但这是个人选择的问题