Php 使用union all或单个语句准备语句
我应该用哪一种?在第二种情况下,语句数量未知。我对事先准备好的声明知之甚少。尝试从简单查询更改代码。我被困在这里,因为在我看来,如果我使用最上面的一个,我将不得不提出许多要求,而且速度会慢一些Php 使用union all或单个语句准备语句,php,mysql,Php,Mysql,我应该用哪一种?在第二种情况下,语句数量未知。我对事先准备好的声明知之甚少。尝试从简单查询更改代码。我被困在这里,因为在我看来,如果我使用最上面的一个,我将不得不提出许多要求,而且速度会慢一些 $stmt = $con->prepare("SELECT * FROM dbtable WHERE col1=? AND col2=?"); 或 编辑: 我的实际代码是: foreach ($games as $ob) { $sql.= "SELECT * FROM (SELECT g
$stmt = $con->prepare("SELECT * FROM dbtable WHERE col1=? AND col2=?");
或
编辑:
我的实际代码是:
foreach ($games as $ob)
{
$sql.= "SELECT * FROM (SELECT gamesdata.rating, gamesdata.name, games.game, games.game_id FROM gamesdata
INNER JOIN login ON gamesdata.user_id=login.user_id
INNER JOIN games ON games.game_id=gamesdata.game_id
WHERE username='".$user."' AND game='".$ob->game."' AND gamespl>0 ORDER BY rating DESC LIMIT 5) DUMMY_ALIAS".$i." UNION ALL ";
$i++;
}
正在尝试将其更改为准备好的语句。您希望设置一次准备好的语句,并使用每个更改的输入运行它
$stmt = $con->prepare("SELECT * FROM dbtable WHERE col1=:user AND col2=:game UNION ALL");
$prepared = array('user' => $user); // user doesn't change
foreach ($games as $ob) { // for each game
$prepared['game'] = $ob->game; // set this queries game
$stmt->execute($prepared); // execute with current game
while ($row = $stmt->fetch()) { // iterate over rows
var_export($row);
}
}
您希望设置一次准备好的语句,并使用每个更改的输入运行它
$stmt = $con->prepare("SELECT * FROM dbtable WHERE col1=:user AND col2=:game UNION ALL");
$prepared = array('user' => $user); // user doesn't change
foreach ($games as $ob) { // for each game
$prepared['game'] = $ob->game; // set this queries game
$stmt->execute($prepared); // execute with current game
while ($row = $stmt->fetch()) { // iterate over rows
var_export($row);
}
}
这取决于您的业务逻辑是什么。第二个似乎没有多大意义。使用bind_param()时会遇到问题,因为您不知道变量的数量,为什么不在
WHERE
条件中使用或,WHERE(col1=?和col2=?)或(col1=?和col2=?)或…
。然后你只有一个查询,而不是一个循环,你可以在你的game
列/$ob->game
值上使用MySQL,所以你只有一个查询限制5,所以我必须使用union allIt,这取决于你的业务逻辑是什么。第二个似乎没有多大意义。使用bind_param()时会遇到问题,因为您不知道变量的数量,为什么不在WHERE
条件中使用或,WHERE(col1=?和col2=?)或(col1=?和col2=?)或…
。然后你只有一个查询,而不是一个循环,你可以在你的游戏
列/$ob->game
值上使用MySQL,所以你只有一个查询限制为5,所以我必须使用union all