2016-11-10 16 views
0

これらの3つのクエリを一緒に実行したいとします。 3番目のクエリのCase_IDに挿入する2番目のクエリからCase_IDを取得するにはどうすればよいですか?PHP - クエリ結果を別のクエリ文に挿入

$query = "insert into `Case`(`informant_userid`,`CaseName`,`CaseTime`) values ('" . $informant_userid . "','" . $CaseName . "',now())"; 
$query = "SELECT `Case_ID` from `Case` ORDER BY `Case_ID` DESC LIMIT 1 "; 
$query = "insert into Picture (Case_Pic,Case_ID) values ('" .addslashes($imagefile). "','" .$Case_ID"')" ; 
+1

Picture(Case_Pic、Case_ID)の値( '' .addslashes($ imagefile))に_insertを試したことがありますか? '、(Case' ORDER BY 'Case_ID' DESC LIMIT 1))の_ –

+0

@DIeはそれを試しましたが、Case_IDは0になります。 – Zesty

答えて

1

から詳細を見ることができます。最新のINSERTに割り当てられた値を取得するには、LAST_INSERT_ID()を使用します。

$query = "insert into `Case`(`informant_userid`,`CaseName`,`CaseTime`) values ('" . $informant_userid . "','" . $CaseName . "',now())"; 
// execute $query 
$query = "insert into Picture (Case_Pic,Case_ID) values ('" .addslashes($imagefile). "', LAST_INSERT_ID())" ; 
// execute $query 
+0

こんにちはBarmar、あなたは自動増分 'CaseID'について正しいです。しかし、あなたのコードを試しましたが、 'CaseID'の結果はまだ0です。 – Zesty

+0

両方のクエリで同じデータベース接続を使用していることを確認してください。 'LAST_INSERT_ID()'は接続ごとです。 – Barmar

+0

両方のクエリに同じデータベース接続を使用しています。 '$ conn = new mysqli(" localhost "、" - "、" - "、" - ");' – Zesty

1

このクエリを一緒に実行するストアドプロシージャを作成できます。

例:

BEGIN 
    insert into `Case`(`informant_userid`,`CaseName`,`CaseTime`) values ('" . $informant_userid . "','" . $CaseName . "',now()); 

    SET out_param = LAST_INSERT_ID(); 
END 

また、あなたは選択クエリを実行することができますし、以下のように変数に値を代入し、他のケース番号としてout_param値を使用することができます。

SELECT @param1 = col1, @param2 = col2, ... 
FROM TABLE1 
WHERE <where_clause> 

あなたは、私がCaseID列が、自動インクリメント列であると仮定しhere

+0

こんにちはTiger、 'SET out_param = LAST_INSERT_ID();'を実行した後、どのように3番目のクエリを実行しますか? – Zesty

1

少しのトリックでINSERT INTO SELECTの文を使用できます。このステートメントは、SELECTクエリの結果をターゲットテーブル(Picture)に挿入します。

"INSERT INTO Picture (Case_Pic,Case_ID) 
SELECT '" . addslashes($imagefile) . "' AS Case_Pic, Case_ID FROM `Case` 
ORDER BY Case_ID DESC LIMIT 1" 

結果にCase_Picを含めるには、列エイリアスが使用されます。

関連する問題