MySQL(不是mysqli)插入上次ID不起作用

时间:2016-06-13 20:07:31

标签: php mysql database forms

我知道那里有很多类似的问题,但我已多次搜索以确保不浪费任何人的时间,但我一直无法找到解决方案。我希望有人能够发现我失踪的东西。

我们的网站目前正在使用MySQL(不是MySQLi ......我知道它应该更新,但至少现在,这是我必须使用的。)

我正在通过已创建的表单更新两个DB表。第一个表称为“客户”,有一些配置文件信息,包含auto_incremented客户ID,并由我表单中的某些信息更新。在第二个表'customer_addresses'中,其余信息将更新为,新表中的一列称为customer,并已在DB中编入索引以链接到'customers'表中的id列。当我提交此表单时,我希望新客户更新'customers_addresses'表,但在提交时不会显示。这是我的代码...(问题部分是靠近底部的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;
}
?>

我知道我正确地连接到数据库,因为每次提交表单时'客户'表都会正确更新并且我知道'customer_addresses'表已正确连接,因为如果我在PHP中手动更改了“mysql_insert_id” ()“,正确的客户ID(比如35),然后它正常工作,但不知怎的,我需要它从第一个查询到客户表获取此信息。

感谢您的帮助。

修改

我也试图使用“LAST_INSERT_ID()”,但也无济于事。

3 个答案:

答案 0 :(得分: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')";

答案 1 :(得分: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());
                           ^^^^^^^^^^^^^^^^^^^^^^^

答案 2 :(得分: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,将值保存在变量中,然后执行插入