php – 在单个函数中使用Insert和Update

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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

脚本宝典总结

以上是脚本宝典为你收集整理的php – 在单个函数中使用Insert和Update全部内容,希望文章能够帮你解决php – 在单个函数中使用Insert和Update所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。