我收到 mysqli_stmt_init 的连接错误,但没有显示错误

Posted

技术标签:

【中文标题】我收到 mysqli_stmt_init 的连接错误,但没有显示错误【英文标题】:I'm getting a connection error with mysqli_stmt_init but no errors are displaying 【发布时间】:2022-01-23 23:31:40 【问题描述】:

我被难住了。我只需要有人查看我的代码并就连接不工作的原因给我一些想法。它适用于我拥有的所有其他更新功能(类似的代码/复制粘贴),但不是这个。

我还必须补充一点,它运行并更新数据库。我的问题是最后得到结果。我将错误追溯到连接,它已经没有任何意义了。

/**
 * Update Avatar Function
 */
function updateAvatar($conn, $username, $avatar) 
    // setup a query
    $sql = "UPDATE users SET avatar = ? WHERE username = ?;";

    // prepare a statement to send a sanitized query
    $stmt = mysqli_stmt_init($conn);
    
    // check for a fail in case the query is faulty
    if (!mysqli_stmt_prepare($stmt, $sql)) 
        header("location: ../admin/account.php?error=stmtfailed");
        exit();
    

    // bind our data to the statement and execute
    mysqli_stmt_bind_param($stmt, "ss", $avatar, $username);
    mysqli_stmt_execute($stmt);

    // save the avatar
    $avatar = json_decode($avatar, true);
    move_uploaded_file($avatar["tmp_name"][0], '../assets/images/uploads/' . $avatar["name"][0]);

    // grab the returned data
    $resultData = mysqli_stmt_get_result($stmt);

    // try to grab the row and return it
    if (!$row = mysqli_fetch_assoc($resultData)) 
        return $row;
    

    // close the statement
    mysqli_stmt_close($stmt);

    // send the user to the account page with a success message
    header("location: ../admin/account.php?success=update");

【问题讨论】:

您遇到的错误是什么? 我认为你应该从这个声明中删除!,除非我误读了它:if (!$row = mysqli_fetch_assoc($resultData))。如果失败,或者没有返回结果,那么就没有什么可返回的了吗? @ChrisHaas 应该删除整个if 语句,因为它没有任何意义。我认为这是 OP 正在谈论的错误 是的,我现在正在阅读 SQL,我看到有一个 UPDATE。也许他们想要mysqli_stmt_affected_rows() mysqli_stmt_get_result: For successful queries which produce a result set, such as SELECT, SHOW, DESCRIBE or EXPLAIN, mysqli_stmt_get_result() will return a mysqli_result object. For other successful queries, mysqli_stmt_get_result() will return false. 因此$resultData 将是错误的,mysqli_fetch_assoc($resultData) 很可能会抛出错误,而不是做任何你认为你想让它做的事情 【参考方案1】:

您似乎一直在观看 Youtube 上那个臭名昭著的教程。你的代码太复杂了,你对自己在做什么感到困惑。

首先,确保您拥有enabled mysqli error reporting。只需在连接数据库前添加mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);即可,无需检查每个函数调用是否成功。

您的代码中的主要问题是您试图在 UPDATE 查询上调用 mysqli_stmt_get_result,这永远不会产生结果。只需删除所有这些代码。

function updateAvatar(mysqli $conn, $username, $avatar): never 
    // setup a query
    $sql = "UPDATE users SET avatar = ? WHERE username = ?;";
    $stmt = mysqli_prepare($conn, $sql);

    // bind our data to the statement and execute
    mysqli_stmt_bind_param($stmt, "ss", $avatar, $username);
    mysqli_stmt_execute($stmt);

    // save the avatar
    $avatar = json_decode($avatar, true);
    move_uploaded_file($avatar["tmp_name"][0], '../assets/images/uploads/' . $avatar["name"][0]);

    // send the user to the account page with a success message
    header("location: ../admin/account.php?success=update");
    // always exit after header location
    exit;

【讨论】:

以上是关于我收到 mysqli_stmt_init 的连接错误,但没有显示错误的主要内容,如果未能解决你的问题,请参考以下文章

Oracle归档日志满了导致Oracle连接(ORA-00257)报错处理

通过 AFNetworking 建立连接时,强制我的应用使用 *** 配置?

不能在 tor 上使用手动连接设置?

eclipse中的MySql(MAMP)jdbc连接错误

我讨厌php help plz

tpc的time-wait