[英]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.