2011-09-22 41 views
0

我正在研究PHP和MySQL创建的调查。所以问题是,我正在尝试创建一个ResponseID,它是每个提交调查问卷的人员的特定ID。因此,创建的代码将1添加到ResponseID列中的现有最大值。下面的代码:PHP MySQL max()函数生成5

//Response ID creation 
$query = "SELECT max(ResponseID) FROM survey"; 
$res = mysql_query($query); 
$RID = $res+1; 

我知道我可以凝聚,但这里的问题:我已经进入了一个项目上表的1. ResponseID当我不同的答案测试的调查显示,未来ResponseID是5.应该是2.所以我再次测试,看下一次是否会产生6次。

不幸的是,它又产生了5个。我让我的PHP专家看了一遍,他说编码是正确的,它应该是来自数据库的东西。除了它是一个int外,我没有在ResponseID中设置任何内容。那么为什么它会产生5?如果任何人都可以请告诉我如何解决它,这将是超级酷的你。

我对PHP有点新鲜。

+0

谢谢你们帮助我的时间!我想我需要再次阅读我的书。超级酷你们! ;) – bsuravech

回答

1

$ res将是一个mysql语句句柄,而不是查询的结果。您仍然必须从此$ res结果中实际获取一行以访问查询中max()函数的值。

这个句柄可能在内部有标识符#5,这就是为什么你会得到那个“奇怪”的结果。

的代码应该是:

$sql = "SELECT MAX(responseID) AS max ..."; 
$result = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_assoc($result); 

$RID = $row['max'] + 1; 
0

你为什么不使用AUTO_INCREMENT柱和检索使用mysql_insert_id新的价值?

0

您需要使用AUTO_INCREMENT列此。问题是,如果PHP脚本的两个实例同时运行(极有可能假设你使用像Apache一个多线程的服务器),那么你可以有这样的情况:

|PHP #1   | PHP #2  | 
================================= 
|Accept client |(waiting)  | 
|SELECT MAX... |(waiting)  | 
|Send to MySQL | Accept client | 
|(waiting)  | SELECT MAX... | 
|(waiting)  | Send to MySQL | 
|Get response 4 |Get response 4 | //Nothing inserted yet, max is still 4 
|Try to insert 5| (waiting)  | 
|Succeeded  | (waiting)  | 
|(waiting)  |Try to insert 5| 
| ...   | Failed!  | 

(这除了Dagon说的)

0

使用$row = mysql_fetch_assoc($res)从查询中得到结果行。

请参阅mysql_fetch_assoc()

0

你没有得到正确值的原因是因为mysql_query没有返回值,它返回一个资源。

试试这个:

//Response ID creation 
$query = "SELECT max(ResponseID) FROM survey"; 
$res = mysql_query($query); 
if($res !== FALSE) $res = mysql_fetch_array($res); // If $res === FALSE, something went wrong 
$RID = $res[0] + 1; 

此外,我建议你在ResponseID场使用AUTO_INCREMENT,这使你的生活轻松了许多:)

+0

谢谢汤姆!这工作完美。我拿走了你和大's的建议,它很有效。我会利用Auto_Increment选项,但我不知道如何将其应用于每个参与调查的人员。调查问题和答案像12行,他们都有一个ResponseID。 – bsuravech

0

我真的不知道,如果我理解乌尔问题,但是如果您想生成特定于每个用户或每个调查问卷的响应ID,那么您可以使用auto_increment作为响应ID。每次发布新调查时,响应ID都会增加。还会获取使用mysql_insert_id发布的最后一个id,以获取发布的最后一个id。

,这样你们可以得到使用

$last_id = mysql_insert_id(); 

u需要把该声明乌尔查询之后的最后一个ID。这样你可以得到最后一个ID。