【问题标题】:MySQL (not mysqli) Insert Last ID not workingMySQL(不是 mysqli)插入最后一个 ID 不起作用
【发布时间】:2016-06-13 20:07:30
【问题描述】:

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

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

我正在通过已创建的表单更新两个数据库表。第一个表,称为“客户”,有一些个人资料信息,包括一个自动递增的客户 ID,并由我的表单中的一些信息更新。在第二个表“customer_addresses”中,其余信息被更新,新表中的一列称为客户,并已在数据库中建立索引以与“客户”表中的 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;
}
?>

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

感谢您的帮助。

编辑

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

【问题讨论】:

  • 尝试从字符串中取出mysql_insert_id。在第一个 mysql_query 之后,分配它,所以$customerId = mysql_insert_id();,然后将其转储出来,看看它是否被正确填充。
  • 你不能只在字符串中间有一个函数mysql_insert_id() 并期望它把它的输出放在那里......它不是那样工作的。将其移到字符串之外并为其分配一个变量。
  • 我知道使用 $mysqli->insert_id,您可以按照我的方式放置代码,这就是我尝试这样做的原因。但在我写这篇文章时,我可以看到它可能与创建变量的“$”符号有关......
  • $password = mysql_real_escape_string(md5($_POST['password'])); 是多余的。一个简单的$password = md5($_POST['password']); 就足够了。
  • 回显你的 $query 看看会发生什么。

标签: php mysql database forms


【解决方案1】:

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')";

【讨论】:

  • 嗨 Barmar ...我曾尝试使用 LAST_INSERT_ID(),正如我在帖子中的编辑所指出的那样......但实际上已经奏效了,所以它一定是一个错字当我尝试这个时。感谢您的建议和帮助!我会在 5 分钟内接受你的回答,所以告诉我我需要等待多长时间
【解决方案2】:

如果您有任何类型的错误处理,而不是仅仅假设成功,您会被告知您的语法错误:

$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());
                           ^^^^^^^^^^^^^^^^^^^^^^^

【讨论】:

  • 嗨,Marc...我同意我应该使用“或死”...声明,这是一个幼稚的举动。谢谢你的建议。
【解决方案3】:
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,将值保存在变量中,然后进行插入

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    相关资源
    最近更新 更多