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