早上好
我had some problems yesterday并得到了帮助,不幸的是,尽管只丢失了一个小细节,我的应用仍无法100%地完成我想要的工作。
考虑到一种情况,我想进行SQL注入以删除数据库,并在发生这种情况时呈现PHP页面。一切工作正常,直到我希望进行渲染-即使执行注入并且在检查MySQL时删除了DB,MySQL仍然没有渲染。问题可能是由于multi_query的使用不正确。代码中的注释中有更多详细信息。
public interface APIService {
@FormUrlEncoded
@GET("/products?page=1")
Call<List<DataModelProducts>> getProducts(@Field("parameter") String
parameter,@Field("value") String value);
}
任何有帮助的想法将不胜感激!
答案 0 :(得分:1)
another.php
的代码块永远不会运行,因为SHOW DATABASES查询失败。我测试了您的代码并添加了一些错误报告:
if ($result = $conn->query("SHOW DATABASES LIKE 'mydatabase'")) {
if($result->num_rows == 0) {
include("another.php");
}
} else {
echo "Error: {$conn->error}\n";
}
我明白了:
错误:命令不同步;您现在不能运行此命令
当已经执行过的SQL查询仍有要提取的结果时,您将无法运行另一SQL查询。即使您使用store_result()
来获取结果集,也只能获取当前结果集。您使用的mulit_query()
会产生多个结果集。您必须先处理所有结果集,直到next_result()
循环结束,然后才能开始新查询。
这里的另一课是,您尝试query()
或multi_query()
或prepare()
或execute()
后,应始终检查并报告错误
这里是一个示例:您必须等到处理完最后一个结果之后,才能运行另一个查询。这意味着之后在$conn->next_result()
上的循环完成了。
if(isset($_POST["button_two"])){
$username = $_POST['username'];
$password = $_POST['password'];
if($conn->multi_query("SELECT id FROM users WHERE username = '$username' OR password = '$password'"))
{
do {
if ($result = $conn->store_result()) {
while ($row = $result->fetch_row()) {
// DISPLAY RESULTS FROM QUERY
}
}
$result->free();
} while ($conn->next_result());
// CAN'T START ANOTHER QUERY UNTIL AFTER THE NEXT_RESULT LOOP IS DONE
if ($result = $conn->query("SHOW DATABASES LIKE 'mydatabase'")) {
if($result->num_rows == 0) {
include("another.php");
}
}
}