php拼接insert和update语句,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,mysql

来源: https://codeday.me/bug/20190709/1413906.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值