佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

搜索
楼主: cath

php mysql 问题--->72#php message box

[复制链接]
 楼主| 发表于 29-3-2008 09:41 PM | 显示全部楼层
我大概明白了 再联系。。
回复

使用道具 举报


ADVERTISEMENT

发表于 30-3-2008 04:07 PM | 显示全部楼层
我看你可能把mysql_insert_id()的意思弄错了。它不是那最新的ID,而是现在的connection所generated的ID。就是说,如果A打开一个网站,然后Insert,那mysql_insert_id()会拿到A所generate的ID,不是最大的ID。。。。

但你已经明白了,那就无所谓咯。。。。
回复

使用道具 举报

 楼主| 发表于 30-3-2008 10:29 PM | 显示全部楼层

其实我想insert student name的同时拿到它的id store进school table的 id field。比如说现在我insert student name ‘john’进 student table,然后他的school是smk apple。我想submit form时在database里把‘john’的id ‘1’也拉进school table 的id field里。。
请问我该如何做呢?除了叫user自己insert id 。。
回复

使用道具 举报

 楼主| 发表于 30-3-2008 10:57 PM | 显示全部楼层
select id from student where name = $_POST[name]??
回复

使用道具 举报

 楼主| 发表于 31-3-2008 08:17 AM | 显示全部楼层
我insert data进table后mysql_insert_id()还是 0。。
和上次一样。。table大概如下
回复

使用道具 举报

发表于 31-3-2008 09:16 AM | 显示全部楼层
感觉上你们在教坏他。。。
他开始不会自己想了。。。
回复

使用道具 举报

Follow Us
发表于 31-3-2008 10:52 AM | 显示全部楼层
还是0吗?那就有点奇怪了。。。

我上网找了一下,可能性有几个,你可以试试:

1) 你把data connection关了/ 你用超过一个connection。必须确定connection是active的(不要用mysql_close())。如果你用超过一个connection,必须pass connection 给mysql_insert_id()。
mysql_insert_id($MY_CONN);

2) 如果你的table还是空的(0 row,没有data),可能mysql_insert_id()会return 0。这好像是bug。试试自己insert一些row,在试试mysql_insert_id()看看可以吗。。

3) 确定你的auto increment id不是在query里set的(不能象Insert Into B Set i=10)

4) 如果还是不能,那你可以用MySQL 的Query Function, LAST_INSERT_ID() 。
$sql = "INSERT INTO <tablename> ....";
mysql_query($sql);
$sql = "SELECT LAST_INSERT_ID()";
$result = mysql_query($sql);
$last_id = mysql_fetch_array($result);
echo $last_id[0];

看看可以拿到ID吗?
回复

使用道具 举报

 楼主| 发表于 31-3-2008 04:20 PM | 显示全部楼层
yhchan,可以了。。不好意思,是我自己用错地方了。。现在可以get到但我还是不能同时间把它store进另一个table。。不知我的方法是否正确。。
回复

使用道具 举报


ADVERTISEMENT

发表于 31-3-2008 05:25 PM | 显示全部楼层
原帖由 vampcheah 于 31-3-2008 09:16 AM 发表
感觉上你们在教坏他。。。
他开始不会自己想了。。。


我自认不是正道,上梁不正下梁歪

Get到ID,但放不进??这真是奇怪了。拿到ID了,就用INSERT INTO table (ID) VALUES ('$new_id'),这样不行吗?

可以post你的code看看?
回复

使用道具 举报

发表于 31-3-2008 05:28 PM | 显示全部楼层
原帖由 cath 于 31-3-2008 04:20 PM 发表
yhchan,可以了。。不好意思,是我自己用错地方了。。现在可以get到但我还是不能同时间把它store进另一个table。。不知我的方法是否正确。。


可以解说一下你是怎么弄错吗?让大家学习以免重犯噢。很多时候大家犯的错误都是很相似的。。。
回复

使用道具 举报

 楼主| 发表于 31-3-2008 06:38 PM | 显示全部楼层
原帖由 yhchan 于 31-3-2008 05:28 PM 发表


可以解说一下你是怎么弄错吗?让大家学习以免重犯噢。很多时候大家犯的错误都是很相似的。。。


是,原来mysql_insert_id()是要insert data同时才会get到value。。如果只是echo只能拿到0
回复

使用道具 举报

 楼主| 发表于 31-3-2008 08:05 PM | 显示全部楼层
原帖由 yhchan 于 31-3-2008 05:25 PM 发表


我自认不是正道,上梁不正下梁歪

Get到ID??挪唤?浚空庹媸瞧婀至恕D玫絀D了,就用INSERT INTO table (ID) VALUES ('$new_id'),这样不行吗?

可以post你的code看看?


终于可以了,是code次序乱了。。谢谢你噢
回复

使用道具 举报

 楼主| 发表于 31-3-2008 09:07 PM | 显示全部楼层
想请教你们,如果用select id from [table] where word = $_POST[word]来get id 和mysql_insert_id(),那一个比较正确?

[ 本帖最后由 cath 于 1-4-2008 09:14 AM 编辑 ]
回复

使用道具 举报

发表于 1-4-2008 11:21 AM | 显示全部楼层
mysql_insert_id()的用处只是拿到上一个INSERT command所generated的auto increment ID。所以,mysql_insert_id()通常只是在INSERT command过后,立刻执行来得到ID。

如果没有INSERT,没有new row,没有generate ID,mysql_insert_id()是没用的。

至于select id from [table] where word = $_POST[word],是从user 输入的keyword来寻找record。然后拿该record的ID。但如果你的record有两个,或多个一样的word,那result就可能不准确了。

两者用法不同,视情况来用,两个都正确
回复

使用道具 举报

 楼主| 发表于 1-4-2008 12:07 PM | 显示全部楼层
如果是在多个user同时进行insert data的时候呢?是不是也一样?
回复

使用道具 举报

发表于 1-4-2008 12:49 PM | 显示全部楼层
原帖由 cath 于 1-4-2008 12:07 PM 发表
如果是在多个user同时进行insert data的时候呢?是不是也一样?


多个user同时进行,可以用mysql_insert_id()。因为这个function是根据个别的connection的。
比如说,A,B,C同时insert,但A,B跟C用个别,不同的database connection。

A = connection a
B = connection b
C = connection c

所以,当A Insert时,Insert command用connection a。然后,mysql_insert_id()会得回由connection a 所generate的ID。所以,mysql_insert_id()可以说是相当准确的,并不会拿到别人的ID。

不象select max(ID),当多人同时INSERT是,就会有问题了。。。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 2-4-2008 12:23 AM | 显示全部楼层
好的,谢谢~~
还有关于checkbox问题想问你,我的checkbox只能delete一个record,这是为什么呢?
<?php
// Check if delete button active, start this
if (isset($_POST['Delete'])){
$checked = $_POST['checkbox'];
for($i=0; $i <$checked; $i++) {
$query_Recordset1 = "delete * FROM word where id = '$checked'";
$result = mysql_query ($query_Recordset1);

}
}

?>

[ 本帖最后由 cath 于 2-4-2008 09:26 PM 编辑 ]
回复

使用道具 举报

发表于 2-4-2008 11:09 AM | 显示全部楼层
你的checkbox是什么?List of "word" ?

假设你的checkbox是user要delete的word,那么,你的checkbox应该要象:

<input type="checkbox" name="checkbox[]" value="word1">
<input type="checkbox" name="checkbox[]" value="word2">
<input type="checkbox" name="checkbox[]" value="word3">
....

记得要在name那里加一个array的 "[]"。

然后,submit form 过后,
$checked = $_POST['checkbox'];
会拿到user选的checkbox的value。所以你的Loop就是:

for($i = 0; $i < count($checked); $i++) {
        $query_Recordset1 = "delete * FROM word WHERE keyword = '" . $checked[$i] . "'";
        $result = mysql_query ($query_Recordset1);
}
回复

使用道具 举报

 楼主| 发表于 2-4-2008 04:10 PM | 显示全部楼层
这个方法我用过了也不能
而且是一个record都delete不到,我不知哪里出错了
回复

使用道具 举报

发表于 2-4-2008 04:35 PM | 显示全部楼层
试试echo你的$query_Recordset1来看看。可能你需要用“LIKE”,而不是“=” 。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2026 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 19-4-2026 10:51 PM , Processed in 0.096814 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表