4

我想知道是否有人能够阐明我如何克服这个问题。

我正在尝试在数据库中添加和更新信息,因此当用户第一次输入完成问卷时,它可以正常工作,但是当他们返回更新问卷时,它会引发错误,“请返回并重试” .

到目前为止,我已经根据给我的建议更新了 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);
}
4

2 回答 2

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。

更新

假设您在后续调用中有唯一索引或 PK ctq_questionnaire.user_id,则第一个查询将出错,而您的第二个查询将不会运行。最简单的解决方法是使用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
于 2012-09-02T15:03:52.967 回答
0

只需将您的插入更改为:

$ctqmemberinsert = "INSERT INTO `ctq_questionnaire` (`user_id`, `Item1`, `Item2`)
    VALUES ( '$memberid', '" . 
        mysql_real_escape_string($questionAns[0]) . "', '" . 
        mysql_real_escape_string($questionAns[1]) . "' )";
于 2012-09-02T15:06:25.387 回答