PHP MySQL max()函数生成5


PHP MySQL max() function producing 5

我正在做一个由PHP和MySQL创建的调查。所以问题是,我试图创建一个ResponseID,这是每个提交调查的人的特定ID。因此,创建代码是为了在ResponseID列的现有最大值上添加1。下面是代码:

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

我知道我可以精简它,但这里有一个问题:我已经在表中输入了一个ResponseID为1的项。当我用不同的答案测试调查时,下一个ResponseID是5。它应该是2。所以我再次测试,看下次是否会产生6。

不幸的是,它又产生了5。我让我的PHP专家检查了一下,他说代码是正确的,应该是数据库中的东西。我没有在ResponseID中设置任何东西,除了它是一个int。为什么会产生5?如果有人能告诉我如何去修理它,那就太好了。

我对PHP有点陌生。

$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;

$res是资源,不是查询的值,请阅读使用手册:http://nz.php.net/manual/en/function.mysql-query.php

为什么不使用AUTO_INCREMENT列而使用mysql_insert_id检索新值呢?

您需要使用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!       |

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

看到作用是()。

你没有得到正确值的原因是因为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,这使您的生活更容易:)

我不确定我是否理解你的问题,但如果你想生成一个特定于每个用户或每个调查发布的响应ID,那么你可以做的就是使用auto_increment的响应ID。每次发布新的调查问卷时,回复id都会增加。还可以使用mysql_insert_id获取最后发布的id。

所以你可以使用

得到最后一个id
$last_id = mysql_insert_id ();

你需要把语句放在你的查询后面。这样你就可以得到最后一个id。