|
|
php mysql 问题--->72#php message box
[复制链接]
|
|
|

楼主 |
发表于 29-3-2008 09:41 PM
|
显示全部楼层
我大概明白了 再联系。。 |
|
|
|
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 31-3-2008 09:16 AM
|
显示全部楼层
感觉上你们在教坏他。。。
他开始不会自己想了。。。 |
|
|
|
|
|
|
|
|
|
|
发表于 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。。不知我的方法是否正确。。 |
|
|
|
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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是,就会有问题了。。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 2-4-2008 04:35 PM
|
显示全部楼层
|
试试echo你的$query_Recordset1来看看。可能你需要用“LIKE”,而不是“=” 。 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|