试图仅更新特定行的列值?

时间:2013-04-15 11:31:40

标签: php mysql

我遇到了一些脚本问题,我基本上是将数据输入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'");

3 个答案:

答案 0 :(得分:3)

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - 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');