我已經嘗試了幾乎所有我知道的東西,但無法解決這個相當奇怪的一組錯誤。mysql INSERTs背靠背隨機失敗
我想在消息隊列表中做4個INSERT。
$ email_start_message,$ sms_start_message,$ email_end_message和$ sms_end_message是存儲爲blob的字符串,將來它們將具有HTML和圖像。
的代碼如下:
$response = array();
$send_status = 0;
$seller_id = 1275;
$re1 = mysql_query("INSERT INTO pos_msg_que(send_status, sid, uid, alert_type, alert_data, send_time) VALUES ('$send_status','$seller_id','$uid','1','mysql_real_escape_string($email_start_message)','$start_time');");
if (!$re1 == 'false') {
$response['start_email_alert'] = '1';
} else {
$response['start_email_alert'] = '0';
}
$re2 = mysql_query("INSERT INTO pos_msg_que(send_status, sid, uid, alert_type, alert_data, send_time) VALUES ('$send_status','$seller_id','$uid','2','mysql_real_escape_string($sms_start_message)','$start_time');");
if (!$re2 == 'false') {
$response['start_sms_alert'] = '1';
} else {
$response['start_sms_alert'] = '0';
}
$re3 = mysql_query("INSERT INTO pos_msg_que(send_status, sid, uid, alert_type, alert_data, send_time) VALUES ('$send_status','$seller_id','$uid','3','mysql_real_escape_string($email_end_message)','$end_time');");
if (!$re3 == 'false') {
$response['end_email_alert'] = '1';
} else {
$response['end_email_alert'] = '0';
}
$re4 = mysql_query("INSERT INTO pos_msg_que(send_status, sid, uid, alert_type, alert_data, send_time) VALUES ('$send_status','$seller_id', '$uid','4','mysql_real_escape_string($sms_end_message)','$end_time');");
if (!$re4 == 'false') {
$response['end_sms_alert'] = '1';
} else {
$response['end_sms_alert'] = '0';
}
echo json_encode($response);
}
表結構是:
+-----------------+------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------+------+-----+-------------------+-----------------------------+
| id | int(8) | NO | PRI | NULL | auto_increment |
| send_status | int(11) | NO | | NULL | |
| sid | int(8) | NO | | NULL | |
| uid | int(8) | NO | | NULL | |
| alert_type | tinyint(2) | NO | | NULL | |
| alert_data | blob | NO | | NULL | |
| send_time | datetime | NO | | NULL | |
| advance_time | int(3) | NO | | NULL | |
| last_attempt_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-----------------+------------+------+-----+-------------------+-----------------------------+
現在,當我運行該代碼時,JSON響應:
{「start_email_alert」:「1 0」,「start_sms_alert」:「0 12" , 「end_email_alert」: 「112」, 「end_sms_alert」: 「112」}
的問題是:
- 首屆插入總是能夠插入ID 0
- 的2nd插入總是失敗,但ID是自動增加的
- 正在發生第3個和第4個插入,但所使用的ID是第2步的ID,因此它們被有效覆蓋。
- 由於我無法弄清楚的原因,alert_type在數據庫中始終顯示1。雖然我直接插入2,3。
有人可以幫我解決這個問題嗎?
誰能遵循這一點,是上帝。 –
@ Fred-ii-我很抱歉,我應該更多地解釋代碼嗎? – rednivlat
從一開始就開始,因爲第一個auto_increment值是'1',而不是'0'。 'mysql_insert_id()''0'的響應是錯誤的。 –