我遇到了一些脚本问题,我基本上是将数据输入MySQL表。该数据将作为1行插入表中。
在表格中输入一行数据后,我希望当前输入的当前/特定行将“account_type”列从其默认值“member”更新为“client”。
这是一个很长的故事,为什么我需要这样做,但我不想只是输入值'客户',它必须从'成员'更新到客户。
我所拥有的脚本(位于底部的位)目前正在这样做,但它影响了表中的所有行,有没有办法可以在更新中添加一个where子句来说明只影响当前正在输入行并且不更新表中的所有其他行?
<?php ob_start();
// CONNECT TO THE DATABASE
require('../../includes/_config/connection.php');
// LOAD FUNCTIONS
require('../../includes/functions.php');
$username = $_POST['username'];
$password = $_POST['password'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$number = $_POST['number'];
$dob = $_POST['dob'];
$accounttype = $_POST['accounttype'];
$query="INSERT INTO ptb_registrations (
username,
password,
firstname,
lastname,
email,
number,
dob,
accounttype,
date_created )
VALUES(
'".$username."',
'".$password."',
'".$firstname."',
'".$lastname."',
'".$email."',
'".$number."',
'".$dob."',
'".$accounttype."',
now()
)";
mysql_query($query) or die();
$query="INSERT INTO ptb_users (
first_name,
last_name,
email,
password )
VALUES(
'".$firstname."',
'".$lastname."',
'".$email."',
MD5('".$password."')
)";
mysql_query($query) or dieerr();
$result = mysql_query("UPDATE ptb_users SET ptb_users.user_id = ptb_users.id,
ptb_users.account_type = 'Client'");
答案 0 :(得分:3)
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
您可以使用MySQL函数LAST_INSERT_ID()
来执行此操作。
旧的ext / MySQL扩展通过mysql_insert_id()
公开此功能,但您也可以在查询中直接,更干净,更安全地访问它。
所以你可以这样做:
$result = mysql_query("
UPDATE ptb_users
SET ptb_users.user_id = ptb_users.id,
ptb_users.account_type = 'Client'
WHERE id = LAST_INSERT_ID()
");
我知道你说“这是一个漫长的故事......”但你所做的事情几乎没有任何意义。我只能想象你是因为一个触发器而这样做 - 这很好地说明了为什么触发器通常是一个坏主意; - )
如果可能,请尝试重新考虑您的设计。
答案 1 :(得分:1)
在第一次查询后获取插入的ID,然后在更新中使用它(假设您有一个带自动增量的主键)。
答案 2 :(得分:0)
尝试使用唯一列上的WHERE条件
mysql_query("UPDATE ptb_users SET ptb_users.user_id = ptb_users.id,
ptb_users.account_type = 'Client'" WHERE ptb_user.email='$email');