我想知道是否有人能够阐明如何克服这个问题。
我正在尝试添加和更新数据库上的信息,所以当用户第一次输入完成调查问卷时它很好并且有效,但是当他们返回更新调查问卷时会抛出错误,“请回去再试一次”。
我已经根据目前给我的建议更新了PHP代码。
谢谢。
PHP代码:
function updatePartCTQ_part1($questionAns, $memberid) {
//First Insert MemberID
$ctqmemberinsert = "INSERT INTO ctq_questionnaire (user_id) VALUES ('$memberid')";
$addresult = mysqli_query($ctqmemberinsert);
if ($addresult) {
$update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}' WHERE user_id = '$memberid'";
mysqli_query($conn, $update);
} else {
echo 'Please go back and try again';
}
}
非常感谢任何帮助。
完成代码
感谢迈克尔和其他人我能够让代码正常工作,所以我想我会发布更新,如果有其他人被卡住,他们就能看到工作版本代码:
function updatePartCTQ_part1($questionAns, $memberid) {
//Check whether user exists
$exists = mysql_query("SELECT * FROM ct1_questionnaire WHERE user_id = '$memberid'");
if (mysql_num_rows($exists) === 0) {
// Doesn't exist. INSERT User into Table
$ctqmemberinsert = "INSERT INTO ctq_questionnaire (user_id) VALUES ('$memberid')";
mysqli_query($ctqmemberinsert);
}
// UDPATE after INSERT
$update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}, Item3 = '{$questionAns[2]}',
Item4 = '{$questionAns[3]}',Item5 = '{$questionAns[4]}', Item6 = '{$questionAns[5]}', Item7 = '{$questionAns[6]}',
Item8 = '{$questionAns[7]}', Item9 = '{$questionAns[8]}', Item10 = '{$questionAns[9]}', Item11 = '{$questionAns[10]}',
Item12 = '{$questionAns[11]}', Item13 = '{$questionAns[12]}', Item14 = '{$questionAns[13]}', Item15 = '{$questionAns[14]}'
WHERE user_id = '$memberid'";
mysql_query($update);
}
答案 0 :(得分:1)
您的UPDATE
语法不正确。您不得重复SET
关键字:
$update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}' WHERE user_id = '$memberid'";
//-------------------------------------------------------------^^^^^^^ no SET here
为了便于阅读,建议将数组值括在{}
中,尽管您的方法应该有效。
请注意,由于try/catch
不会引发异常,因此mysql_query()
不会有多大用处。相反,它只会在出错时返回FALSE
。相反,将其存储在变量中并像TRUE/FALSE
一样测试INSERT
。
// We assume these values have already been validated and escaped with mysql_real_escape_string()...
$update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}' WHERE user_id = '$memberid'";
$upd_result = mysql_query($update);
if ($upd_result) {
// ok
}
else {
// error.
}
最后,我怀疑你之前听过这个,旧的mysql_*()
函数被安排弃用。考虑转移到支持预处理语句的API,如MySQLi或PDO。
假设在后续调用中ctq_questionnaire.user_id
上有唯一索引或PK,第一个查询将出错,第二个查询将无法运行。最简单的解决方法是使用INSERT IGNORE
,这会将关键违规视为成功。
$ctqmemberinsert = "INSERT IGNORE INTO ctq_questionnaire (user_id) VALUES ('$memberid')";
更复杂的解决方案是首先测试表中是否存在SELECT
的用户名,如果不存在,请执行INSERT
。
$exists_q = mysql_query("SELECT 1 FROM ct1_questionnaire WHERE user_id = '$memberid'");
if (mysql_num_rows($exists_q) === 0) {
// Doesn't exist. Do the INSERT query
}
// proceed to the UDPATE after INSERTing if necessary
答案 1 :(得分:0)
只需将插入更改为:
$ctqmemberinsert = "INSERT INTO `ctq_questionnaire` (`user_id`, `Item1`, `Item2`)
VALUES ( '$memberid', '" .
mysql_real_escape_string($questionAns[0]) . "', '" .
mysql_real_escape_string($questionAns[1]) . "' )";