我试图从数据库中获取最大ID。但是,它会返回错误
undefined index: id in $maxID=$rowsInit["id"]; and $response["maxID"] = $rowsInit["id"];
这是我的代码
if ($_POST['maxID'] == 0) {
$queryInit = "SELECT MAX(id) FROM trade";
try {
$stmtInit = $db->prepare($queryInit);
$resultInit = $stmtInit->execute();
} catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = $ex;
die(json_encode($response));
}
$rowsInit = $stmtInit->fetchAll();
if ($rowsInit) {
$maxID = $rowsInit["id"];
$response["maxID"] = $rowsInit["id"];
} else {
$response["success"] = 0;
$response["message"] = "No Trade Available!";
die(json_encode($response));
}
} else {
$maxID = $_POST['maxID'];
}
我的交易表中有一个列调用ID。我不知道哪个部分是错的。也许我错过了一些部分。
答案 0 :(得分:4)
将函数调用别名为id
:
$queryInit="SELECT MAX(id) as id FROM trade";
您还需要获取第一行的数据。所以也提供行索引。试试
$rowsInit[0]["id"]
答案 1 :(得分:2)
将此更改为
SELECT MAX(id) FROM trade
此
SELECT MAX(id) AS id FROM trade
将此更改为
$maxID=$rowsInit["id"];
此
$maxID=$rowsInit[0]["id"]; # or $maxID=$rowsInit[0]->id
我知道用0
索引的Fetched数据。 Check these examples
如果失败,请在
print_r($rowsInit);die;
旁边添加此if ($rowsInit) {
并检查其在阵列中的放置方式
答案 2 :(得分:1)
PDO远远超过每个人的需求。除了无所不在的fetchAll()之外,它还有一些方法可以以十几种其他格式获取结果,包括单个标量值,因此您不必像其他答案中所建议的那样更改查询。实际上,您只需一行即可获得最大ID:
$id = $pdo->query("SELECT MAX(id) FROM trade")->fetchColumn();
请注意,如果查询中没有占位符,则无需准备查询。
更重要的是,您对error reporting的想法也是错误的。您永远不应该泄露外部的实际系统错误消息。只应返回一般错误消息。
try {
if ($_POST['maxID'] == 0) {
$maxID = $pdo->query("SELECT MAX(id) FROM trade")->fetchColumn();
if (!$rowsInit) {
$response["success"] = 0;
$response["message"] = "No Trade Available!";
die(json_encode($response));
}
} else {
$maxID = $_POST['maxID'];
}
// here goes your code to get the response
} catch (Exception $ex) {
log_error($ex);
$response["success"] = 0;
$response["message"] = "Server error";
die(json_encode($response));
}
在这里,您将整个代码包装在一个全局try catch块中,该块不仅可以处理可能发生的PDO异常,还可以处理任何其他异常。
答案 3 :(得分:0)
查询显示:
SELECT MAX(id) FROM trade
为什么您希望在结果集中有一个名为id
的列? SELECT
子句中没有这样的列。只有MAX(id)
表达式,并且结果集中的列名为MAX(id)
,除非您为其提供alias:
SELECT MAX(id) AS id FROM trade
详细了解SELECT
statement的语法。
$rowsInit
仍然没有id
索引,因为:
$rowsInit = $stmtInit->fetchAll();
PDOStatement::fetchAll()返回一组行。你应该使用$rowsInit = $stmtInit->fetchAll()[0];
,或者更好的是,使用PDOStatement::fetch()来获取第一行(结果集中只包含一行):
$rowsInit = $stmtInit->fetch();