0

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

3 回答 3

3

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程


您可以使用 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()
");

我知道你说“这说来话长……”但你所做的几乎没有意义。我只能想象你这样做是因为触发器 - 这很好地说明了为什么触发器通常是一个坏主意;-)

如果可能,请尝试并重新考虑您的设计。

于 2013-04-15T11:39:16.800 回答
1

在第一次查询后获取插入的 ID,然后在更新中使用它(假设您有一个自动递增的主键)。

于 2013-04-15T11:34:18.900 回答
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');
于 2013-04-15T11:52:19.017 回答