我正在开发一个使用某种 roomCode 主机/连接系统来运行的项目。它是用 js/html/css 编写的,带有 php 服务器。到目前为止,我已经成功地在这个项目中使用 PHP 和 MySQL 将内容插入到一些表中。
我正在开发的特定功能允许主机关闭房间,这会从数据库中删除 roomCode 以及连接到它的所有用户。但是,我遇到了一个问题,即 mysqli 查询没有从数据库中删除任何内容。我刚开始尝试删除房间信息(全部在一行中),但它显示了无法正常工作的所有迹象。我已经验证 phpMyAdmin 具有我要删除的数据,并且当我在那里手动执行查询时,查询可以工作,但是当从我的应用程序运行时,affected_rows 保持为 0,并且数据仍在 phpMyAdmin 上。
这是代码(SQLConnect() 是一个保存我的数据库登录信息的辅助函数):
$mysql = SQLConnect();
$status = 'wait';
$stmt = $mysql -> prepare('DELETE FROM room WHERE roomCode = ?');
$stmt -> bind_param('s', $_POST['roomCode']);
$stmt -> execute();
if($mysql -> affected_rows == 0){
$response = ['status' => 'error',
'error' => 'Error closing room!'];
echo json_encode($response);
return;
} else {
$response = [
'status' => 'ok' //Placeholder response for now
];
echo json_encode($response);
return;
}
有趣的是,当使用 SELECT 查询尝试相同的设置来查找 roomCode 时,它不会返回任何内容。所有其他带有 mySQL 查询的 php 文件都可以插入和选择内容,所以我很困惑为什么这个文件在使用相同的 SQLConnect() 函数来设置连接时不起作用。
“$stmt -> bind_param('s', $_POST['roomCode']);”
您是否尝试过将其设置为“i”?我假设 roomCode 是一个整数而不是一个字符串。这可能会导致代码无法执行。
您是否检查过“$stmt ->execute();”返回真还是假? 如果语句正确执行,它应该返回 true,如果没有正确执行,它应该返回 false。
另外,如果 $mysql->error 没有显示任何内容,您应该尝试检查 $mysql->connect_error 以防万一。