mysql 程序 php 中的查询未返回单个字段
mysql query in procedural php isn't returning single field
正在尝试从 mysql table 中检索单个字段。这是 PHP:
if ($signatureDAT) {
mysqli_query($dragonden, "INSERT INTO Signatures(signature) VALUES('$signatureDAT')");
$sigID = mysqli_insert_id($dragonden);
// RETRIEVE DATA FROM DB, TO VERIFY IT WAS SAVED PROPERLY
$sigDAT = mysqli_query($dragonden, "SELECT signature FROM Signatures WHERE id = '$sigID'");
// SEND RESULTS BACK TO AJAX
$data = array();
array_push($data, $signatureDAT, $sigDAT);
print json_encode($data);
}
然后我使用 ajax 检索 $sigDAT
Ajax returns $sigDAT
的以下结果:
[object Object]
Ajax returns $signatureDAT
(原始数据)正确。
$sigDAT
和 $signatureDAT
应该具有相同的值,因此我怀疑问题出在代码的“RETRIEVE”部分。
要回答您的问题,您需要使用 mysqli_fetch_assoc()
来检索结果 - 您代码中的 $sigDAT
是 class mysqli_result
的对象。但是,您的查询容易受到 SQL 注入攻击,因此您应该使用准备好的语句来执行您的查询。请参阅下面的代码。
此外,如果您将 mysqli_report()
设置为出错时抛出异常,则不必执行后续 select 来验证查询是否已完成 - 因为如果发生错误,则会抛出异常被抛出,并且您没有到达将值添加到 $data
.
的部分
// Make MySQL throw exceptions on error
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
if ($signatureDAT) {
$data = [];
try {
$stmt = $dragonden->prepare('INSERT INTO Signatures(signature) VALUES (?)');
$stmt->bind_param("s", $signatureDAT);
$stmt->execute();
$data[] = $signatureDAT;
$data[] = $stmt->insert_id;
$stmt->close();
} catch(Exception $e) {
// An error occurred, handle that here
}
print json_encode($data);
}
正在尝试从 mysql table 中检索单个字段。这是 PHP:
if ($signatureDAT) {
mysqli_query($dragonden, "INSERT INTO Signatures(signature) VALUES('$signatureDAT')");
$sigID = mysqli_insert_id($dragonden);
// RETRIEVE DATA FROM DB, TO VERIFY IT WAS SAVED PROPERLY
$sigDAT = mysqli_query($dragonden, "SELECT signature FROM Signatures WHERE id = '$sigID'");
// SEND RESULTS BACK TO AJAX
$data = array();
array_push($data, $signatureDAT, $sigDAT);
print json_encode($data);
}
然后我使用 ajax 检索 $sigDAT
Ajax returns $sigDAT
的以下结果:
[object Object]
Ajax returns $signatureDAT
(原始数据)正确。
$sigDAT
和 $signatureDAT
应该具有相同的值,因此我怀疑问题出在代码的“RETRIEVE”部分。
要回答您的问题,您需要使用 mysqli_fetch_assoc()
来检索结果 - 您代码中的 $sigDAT
是 class mysqli_result
的对象。但是,您的查询容易受到 SQL 注入攻击,因此您应该使用准备好的语句来执行您的查询。请参阅下面的代码。
此外,如果您将 mysqli_report()
设置为出错时抛出异常,则不必执行后续 select 来验证查询是否已完成 - 因为如果发生错误,则会抛出异常被抛出,并且您没有到达将值添加到 $data
.
// Make MySQL throw exceptions on error
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
if ($signatureDAT) {
$data = [];
try {
$stmt = $dragonden->prepare('INSERT INTO Signatures(signature) VALUES (?)');
$stmt->bind_param("s", $signatureDAT);
$stmt->execute();
$data[] = $signatureDAT;
$data[] = $stmt->insert_id;
$stmt->close();
} catch(Exception $e) {
// An error occurred, handle that here
}
print json_encode($data);
}