我已经尝试了几乎所有我知道但却无法解决这个奇怪的错误集。
我正在尝试在消息队列表中生成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":" 1 12"," end_sms_alert":" 1 12"}
问题是:
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
在被投票两次并被收藏一次后,我对代码的错误感到困惑。感谢@AirThomas和@Jasper,我格式化了代码并采用了一些最佳实践,这帮助我解决了这个问题。
问题在于字符串。他们有单引号,并且不知何故没有逃脱(主要是由于一些奇怪的字符编码问题。我没有费心去了解细节)。而是使用(phpfreaks)中的一个简单函数来确保,我在逃避时不会遗忘任何石头。功能是:
function cleanStr($str){
$str = trim($str);
if($str == "") return;
$str = stripslashes($str);//STRIP \ slashes
if (function_exists(mysqli_real_escape_string)){
$str = mysqli_real_escape_string($str);
}else{
$str = mysql_real_escape_string($str);
}
//CONVERT TO HTML
$str = htmlspecialchars($str);
//LAST CLEAN UP
$str = preg_replace("#\'#","",$str);
return $str;
}
在转义字符串并参数化代码(编辑问题以显示最新代码)后,插入工作就像一个魅力。
我今天学到的东西:
echo mysql_errno()。 “:”。 mysql_error()。 “\ n” 个;
我刚刚开始编码(4周后),所以对明显的错误道歉。
谢谢大家