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_*新しいコードで関数を使用しないでください。それらはもはや保守されておらず、公式に廃止されています。赤いボックスがか? 代わりに準備済みステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。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 に答える