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);
}