使用PHP end()函数分配新id

使用PHP end()函数分配新id,php,mysql,pdo,Php,Mysql,Pdo,我有一个数据库问题表。我使用整数变量Id对表中的所有元素进行排序 我想要什么? 无论何时,都会添加一个新问题。它被分配了一个新的id,比我数据库中最后一个问题的id大1倍 以下是我的工作: include('dbconnect.php'); $ids = $connection->prepare('SELECT * FROM question ORDER BY id ASC'); $ids->execute(array()); $result = $id

我有一个数据库问题表。我使用整数变量Id对表中的所有元素进行排序

我想要什么? 无论何时,都会添加一个新问题。它被分配了一个新的id,比我数据库中最后一个问题的id大1倍

以下是我的工作:

include('dbconnect.php');



    $ids = $connection->prepare('SELECT * FROM question ORDER BY id ASC');
    $ids->execute(array());
    $result = $ids->fetchAll(PDO::FETCH_ASSOC);
    $new_id = end($result['id']); //Error in this line.
    $new_id = $new_id + 1;
但是,我总是犯错误

Warning: end() expects parameter 1 to be array, null given in /Applications/MAMP/htdocs/question/submit.php on line 20
我使用的是
FetchAll
语句,因此我觉得应该返回一个数组。谁能找出错误在哪里

添加到数据库中的每个新问题的ID为1。

如下所述:

AUTO_INCREMENT
属性可用于为新行生成唯一标识:

CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals; 创建餐桌动物( id MEDIUMINT NOT NULL自动增量, 名称字符(30)不为空, 主键(id) ); 插入到动物(名称)值中 狗、猫、企鹅、, ('lax')、('whale')、('鸵鸟'); 从动物中选择*; 返回:

+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+ +----+---------+ |id |名称| +----+---------+ |1 |狗| |2 |猫| |3 |企鹅| |4 |松懈| |5 |鲸鱼| |6 |鸵鸟| +----+---------+ 没有为
AUTO_INCREMENT
列指定值,因此MySQL会自动分配序列号。您还可以显式地将
NULL
或0分配给列以生成序列号


为什么不在数据库中使用自动增量呢?如果您不能轻松修改sql模式,您也可以执行
从问题
中选择MAX(id)+1作为新的\u id。您当前的问题是
end($array)
提供了数组的最后一个元素,而实际提供的NULL($result['id'])不存在)。您可以使用
end($result)['id']
来代替(>=PHP5.4)@Ninsuo如果我使用
end($result)['id']
,分号放在哪里。因为如果我执行
end($result)['id']
end($result),它将不起作用;['id']
。请给我一个使用上述风格的end函数的echo语句。没关系,算出了。首先,我需要将数组返回到一些变量中,比如
$list=end($result)
,然后使用
$list['id']
。这很有魅力。谢谢你的帮助。我强烈反对@Ninsuo的方法:它不是线程安全的。如果同时插入两个问题(可能是由不同的用户提出的),则可能会出现竞争风险,即两个会话都会为各自的新问题派生相同的id。使用表锁是执行此操作的唯一安全方法,例如MySQL在后台使用
自动增量