2016-06-13 46 views
0

我知道那裏有很多類似的問題,但我已經搜索了很多次,以確保不會浪費任何人的時間,但我一直無法找到解決方案。我希望有人能夠發現我錯過的東西。MySQL(not mysqli)插入最後一個ID不起作用

我們的網站目前正在使用MySQL(不是MySQLi ...我知道它應該更新,但現在至少,這是我必須與之合作)。

我正在通過已創建的表單更新兩個數據庫表。第一張名爲「客戶」的表格包含一些配置文件信息,幷包含一個auto_incremented客戶ID,並由我的表單中的一些信息進行更新。在第二個表'customer_addresses'中,剩下的信息被更新,並且新表中的一列被稱爲customer,並且在DB中被索引以鏈接到'customers'表中的id列。當我提交此表單時,我希望'customers_addresses'表與新客戶一起更新,但未提交時顯示。這裏是我的代碼...(QUESTIONABLE部分是mysql_insert_id()接近底部)....

<?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正確的「客戶」表每次正確更新我提交我的表單並且我知道'customer_addresses'表連接正確,因爲如果我在PHP中手動更改「mysql_insert_id()」,使其成爲正確的客戶ID(例如35),那麼它可以正常工作,但不知怎的,我需要它從第一個查詢獲取這些信息到客戶表。

感謝您的任何幫助。

編輯

我還試圖用「LAST_INSERT_ID()」,但無濟於事爲好。

+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

如果你有任何的錯誤處理的全部,而不僅僅是假設成功,你會被告知你的語法錯誤:

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

這不是一個PHP函數調用。它是查詢字符串的一部分,是一個mysql函數調用。 Mysql函數調用不會以mysql_作爲前綴。

從不EVER假設數據庫調用成功。總是假設故障,檢查是否存在故障,並把成功作爲一個意外的驚喜:

$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的值,然後做你插入