2016-06-13 12 views
0

そこには多くの同様の質問がありますが、誰かの時間を無駄にしないように何度も調べていますが、解決策を見つけることができませんでした。私は、誰かが私が見逃しているものを見つけられることを期待しています。MySQL(mysqliではない)最後のIDが挿入されていない

私たちのサイトは現在MySQLを使用しています(MySQLiではありません...私はそれが更新されるべきであることを知っていますが、少なくとも今のところ、これは私が処理しなければならないものです)。

作成されたフォームを使用して2つのDBテーブルを更新しています。 「顧客」と呼ばれる最初の表には、いくつかのプロファイル情報があり、auto_incremented顧客IDが含まれており、自分のフォームの情報の一部によって更新されます。 2番目のテーブル 'customer_addresses'では、残りの情報が更新され、新しいテーブルのカラムの1つがcustomerと呼ばれ、DBでインデックスされて 'customers'テーブルのidカラムにリンクされています。このフォームを送信する際に、 'customers_addresses'テーブルを新しい顧客に更新してもらいたいですが、送信時に表示されません。ここに私のコードは、(QUESTIONABLE PARTは、下の方にmysql_insert_id()IS)...です....

<?php 
if($_POST) { 
    //Get variables from post array 
    $first_name = mysql_real_escape_string($_POST['first_name']); 
    $last_name = mysql_real_escape_string($_POST['last_name']); 
    $email = mysql_real_escape_string($_POST['email']); 
    $password = mysql_real_escape_string(md5($_POST['password'])); 
    $address = mysql_real_escape_string($_POST['address']); 
    $address2 = mysql_real_escape_string($_POST['address2']); 
    $city = mysql_real_escape_string($_POST['city']); 
    $state = mysql_real_escape_string($_POST['state']); 
    $zipcode = mysql_real_escape_string($_POST['zipcode']); 

    //Create customer query 
    $query="INSERT INTO customers (first_name,last_name,email,password) 
     VALUES('$first_name','$last_name','$email','$password')"; 
    //Run query 
    mysql_query($query); 

    //Create address query 
    $query="INSERT INTO customer_addresses (customer,address,address2,city,state,zipcode) 
     VALUES(mysql_insert_id(),'$address','$address2','$city','$state','$zipcode')"; 
    //Run query 
    mysql_query($query); 

    header('Location: index.php'); 
    exit; 
} 
?> 

私は「顧客のテーブルが正しくたびに更新されるように私が正しくDBに接続されています知っています私は私のフォームを提出し、私は手動でPHPの "mysql_insert_id()"、正しい顧客IDは何か(35)、それは正しく動作するように変更するので、私は 'customer_addresses'テーブルが正しく接続されている知っているが、どうにかして最初のクエリからcustomersテーブルにこの情報を取得する必要があります。

ありがとうございます。私も同様に「LAST_INSERT_ID()」を使用しようとしましたが、無駄にしている

EDIT

+0

をしよう文字列の中から 'mysql_insert_id'を取り出してみてください。最初のmysql_queryの後に '$ customerId = mysql_insert_id();'を代入し、それをダンプして、それが正しく設定されているかどうかを確認します。 –

+0

文字列の途中に 'mysql_insert_id()'関数を置くだけでは、その出力をそこに置くことはできません...そのようには動作しません。それをあなたの文字列の外側に移動し、それに変数を割り当てます。 – cmorrissey

+0

私は$ mysqli-> insert_idを使ってコードを置くことができますので、これを試してみました。しかし、私がこれを書いているとき、変数を作成する '$'記号と何か関係があることがわかります... –

答えて

3

mysql_insert_id()は、PHPの関数ではなく、MySQLの関数であり、関数呼び出しは、文字列内で展開されません。.. MySQLの機能がLAST_INSERT_ID()と呼ばれ、それは次のようになります。

$query="INSERT INTO customer_addresses (customer,address,address2,city,state,zipcode) 
    VALUES(LAST_INSERT_ID(),'$address','$address2','$city','$state','$zipcode')"; 

それとも、呼び出すことができますPHP関数を呼び出し、結果を文字列に挿入します。

$customer_id = mysql_insert_id(); 
$query="INSERT INTO customer_addresses (customer,address,address2,city,state,zipcode) 
    VALUES($customer_id,'$address','$address2','$city','$state','$zipcode')"; 
+0

こんにちはBarmar ...私はLAST_INSERT_ID()を使って試してみましたが、私の編集で指摘されていましたが、実際にはうまくいきました。あなたの提案と助けてくれてありがとう!私は5分であなたの答えを受け入れるでしょう、それは私がどれくらい待たなければならないか教えてくれました –

1

あなたがすべてでのエラー処理のいずれかの種類を持っていた場合は、代わりにちょうど成功を仮定して、あなたはあなたの構文エラーについて言われていると思います:

PHPの関数呼び出しではありません
$query="INSERT INTO customer_addresses (customer,address,address2,city,state,zipcode) 
    VALUES(mysql_insert_id(),'$address','$address2','$city','$state','$zipcode')"; 
    ^^^^^^^^^^^^^^^^^ 

。これはクエリ文字列の一部であり、mysql関数呼び出しです。 Mysqlの関数呼び出しの先頭には、mysql_はありません。

なしEVERは、DB呼び出しで成功したものとします。必ず、失敗を想定し、障害をチェックし、うれしい驚きとして成功を扱う:

$result = mysql_query($sql) or die(mysql_error()); 
          ^^^^^^^^^^^^^^^^^^^^^^^ 
+0

こんにちはマーク...私は "死ぬ"という言葉を使うべきだったことに同意します、それは素朴な動きでした。アドバイスありがとうございます。 –

0
function executeSingleResult($query) 
{ 
$result= mysql_query($query); //ESEGUO LA QUERY 
return mysql_fetch_assoc($result); 
} 

$r= executeSingleResult($query); //write your query to retrieve your last ID 
$ID=$r["ID"]; 
$query="INSERT INTO customer_addresses (customer,address,address2,city,state,zipcode) 
     VALUES($ID,'$address','$address2','$city','$state','$zipcode')"; 

は、単純なクエリを使用してIDを取得するvariabeに値を保存して、あなたの挿入は

関連する問題