关于php中mysql_insert_id的问题


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

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

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

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

我就不翻译了——

换句话说,如果你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的神器)

转载于:https://my.oschina.net/Bruce370/blog/408794

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值