无法从数据库中获取最大ID
我试图从数据库中获取最大ID。然而,它返回我的错误无法从数据库中获取最大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。我不知道哪部分是错的。也许我想念一些部分。
更改为
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
。Check these examples
如果无法添加此
print_r($rowsInit);die;
旁边if ($rowsInit) {
,并检查它是如何放置在阵列
查询写着:
SELECT MAX(id) FROM trade
为什么你期望有一个名为列在结果集id
? SELECT
子句中没有这样的列。只有在MAX(id)
表达及其在ResultSet列被命名为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();
PDO是远远超过大家正在它。除了omniprescent 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异常而且任何其他异常可能发生的。
$ queryInit =“SELECT MAX(id)as id FROM trade”; 尝试更改您的查询。 –
@scarletwitch我改变了查询,但仍然收到相同的错误 – phoon
你可以显示'$ response'和'$ rowsInit'吗? – lighter