简体   繁体   English

合并所有或单个语句的预备语句

[英]Prepared statements with union all or single statement

Which should i use? 我应该使用哪个? In second one there is unknown quantity of statements. 在第二个中,语句的数量未知。 I know very little about prepared statements. 我对准备好的语句了解甚少。 Trying to change my code from simple queries. 尝试通过简单的查询更改我的代码。 And i am stuck here, since it seems to me if i use top one, i'll have to make many request and it will be slower. 而且我被困在这里,因为在我看来,如果我使用第一名,我将不得不提出许多要求,而且速度会变慢。

$stmt  = $con->prepare("SELECT * FROM dbtable WHERE col1=? AND col2=?");

or 要么

$stmt  = $con->prepare("
    SELECT * FROM dbtable WHERE col1=? AND col2=? UNION ALL
    SELECT * FROM dbtable WHERE col1=? AND col2=? UNION ALL
    SELECT * FROM dbtable WHERE col1=? AND col2=? UNION ALL
    SELECT * FROM dbtable WHERE col1=? AND col2=? UNION ALL
    SELECT * FROM dbtable WHERE col1=? AND col2=? UNION ALL
    SELECT * FROM dbtable WHERE col1=? AND col2=? UNION ALL
    SELECT * FROM dbtable WHERE col1=? AND col2=?
");

edit: 编辑:

My actual code is: 我的实际代码是:

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++;
}

Trying to change this to prepared statements. 试图将其更改为准备好的语句。

You want to set up your prepared statement once and run it with each of the changed inputs. 您想要一次设置准备好的语句,然后使用每个更改的输入来运行它。

$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);
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM