php – 在单个函数中使用Insert和Update
我想知道是否有人能够阐明如何克服这个问题.
我正在尝试添加和更新数据库上的信息,所以当用户第一次输入完成调查问卷时它很好并且有效,但是当他们回去更新调查问卷时会抛出一个错误,“请回去再试一次” . 我已经使用给我的建议更新了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); } 解决方法
您的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.相反,将其存储在变量中并像使用INSERT一样测试TRUE / FALSE. // 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |