关于php中mysql_insert_id的问题


通常,在database中的每一个表都有一个prmary key主键,比如下面这个叫做voters的表

关于php中mysql_insert_id的问题_第1张图片

voter_id作为主键,并且它设置了一个特殊属性  AUTO)INCREMENT ,即自动增加 (如果insert一个新的voter但没有设置它的voter_id,则它的voter_id就会被设置为一个数,并且这个数是递增的。(其中具体的算法不在这里详说))。

瞎扯了一堆还是没有说到mysql_insert_id()?莫急——

在w3school中这个函数是这么定义的

关于php中mysql_insert_id的问题_第2张图片

我就不翻译了——

换句话说,如果你insert了一个新的数据,又需要马上对这个项进行读取或者更新或者让这个项关联其他的表,那么你就很可能需要知道它的主键(因为主键都是独一无二的 unique)。而这个函数mysql_insert_id()就能帮你方便的获取这个主键。

没有什么比举例子更能帮助理解了:

面向过程的调用方法

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$mysqli->query("CREATE TABLE myCity LIKE City");

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);

/* drop table */
$mysqli->query("DROP TABLE myCity");

/* close connection */
$mysqli->close();
?>



面向过程 的方法

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TABLE myCity LIKE City");

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
mysqli_query($link, $query);

printf ("New Record has id %d.\n", mysqli_insert_id($link));

/* drop table */
mysqli_query($link, "DROP TABLE myCity");

/* close connection */
mysqli_close($link);
?>



----------------------------------扯淡的分割线-------------------------------------------------

但是奇怪的是,有时候面向过程的使用方法不一定奏效,比如我今天刚写的一段代码中

mysqli_insert_id($link)
这个永远出错,无论怎么debug都找不出原因。于是我尝试使用object的方式,就立马解决了。

有可能是浏览器兼容问题或者php就是在逐渐推广OOP的使用方法(个人猜测)。

因此,建议更经常使用OOP的方式来写mysqli相关的代码。

(对小白的提示:var_dump()可以帮助显示object中的信息哟~简直是debug的神器)

你可能感兴趣的:(关于php中mysql_insert_id的问题)