我一直试图弄清楚如果接收的数据存在于另一个表中,如何将从表单接收的数据插入到一个表中。如果数据不存在,则移动到另一个查询并检查另一个表以获取接收的数据。
这就是我要做的事情:
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在网站上运行。
答案 0 :(得分: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,它支持预处理语句来防止这种情况。如果你愿意,它也有一个OO风格的API,但我没有使用它。