1

我一直在试图弄清楚只有当接收到的数据存在于另一个表中时,如何将从表单接收到的数据插入到一个表中。如果数据不存在,它会移动到另一个查询并检查另一个表以获取接收到的数据。

这就是我想要做的:

function addNewUser($username, $password, $email, $actcode){
    $time = time();

    $q = "UPDATE ".TBL_RELEASE_CODES." SET code = '$actcode' WHERE code = '$actcode'";
    $result = mysql_query($q, $this->connection);
    if (!$result || (mysql_numrows($result)) == 0){
        $q = "INSERT INTO ".TBL_RELEASE_USERS." VALUES ('$username', '$password', '0', $ulevel, '$email', '$actcode', $time)";
        return mysql_query($q, $this->connection);
    }

这样做的目的是,当用户提交特殊代码时,系统将运行检查以查看该代码是否属于某个表。

如果它在表中找到提交的代码,它将运行与检查关联的插入查询,如果没有,则它会中断并返回一个错误,指出未找到匹配项。

我可能错误地使用了代码,因为我一直在从 Google 搜索中搜索信息并对其进行测试。还没有运气。

此代码正在使用 PHP 5 和 MySQL 的网站上运行。

4

1 回答 1

0

第一个查询没有做任何事情——它只在代码已经是 $actcode 的行中将代码设置为 $actcode。您应该使用 SELECT,而不是 UPDATE:

$q = "SELECT COUNT(*) FROM ".TBL_RELEASE_CODES." WHERE code = ?";
$stmt = mysqli_prepare($this->connection, $q);
mysqli_stmt_bind_param($stmt, 's', $actcode);
mysqli_stmt_bind_result($stmt, $count);
mysqli_execute($stmt) or die "Query failed: ".mysqli_stmt_error($stmt);
mysqli_stmt_fetch($stmt);
if ($count == 1) {
  // Insert into TBL_RELEASE_USERS
} else {
  // Return error saying no match found
}

您也不应该使用 mysql_XXX 函数。它们已被弃用,并且难以避免 SQL 注入攻击。我上面的代码使用 mysqli_XXX,它支持准备好的语句来防止这种情况。如果您愿意,它也有一个面向对象风格的 API,但我没有在上面使用它。

于 2012-09-25T01:50:36.227 回答