【问题标题】:Prepared statement nested inside another prepared statement准备好的语句嵌套在另一个准备好的语句中
【发布时间】:2013-02-10 11:13:28
【问题描述】:

我试图弄清楚如何在另一个准备好的语句循环中运行第二个准备好的语句。不是最佳的,但不知道我还能如何解决这个问题......

这是我正在尝试的:

$stmt = $mysqli->stmt_init();

### GET THE CURRENT USERS FRIENDS ###
$sql = "SELECT f.fk_user_id2
             , u.username
             , u.profileimg FROM ".$prefix."_friends f 
                INNER JOIN ".$prefix."_users u
                    ON f.fk_user_id2 = u.id     
            WHERE f.fk_user_id1 = ? ORDER BY u.username ASC";

if($stmt->prepare($sql)){

    $stmt->bind_param('i',$playerid);
    $stmt->execute();
    $stmt->bind_result($userPoints);
    while ($stmt->fetch()){

        $friendid = $row1['fk_user_id2'];
        $friendname = $row1['username'];
        if(empty($row1['profileimg'])){
            $profileimg = 'http://duefmun.dk/profileimages/noimage.png';
        } else {
            $profileimg = 'http://duefmun.dk/profileimages/'.$row1['profileimg'];
        }

        ### GET THE HISTORY ###
        $sql1 = mysql_query("SELECT wins, games FROM ".$prefix."_newversus WHERE fk_player=? AND fk_opponent=?");
        if($stmt->prepare($sql1)){
            $stmt->bind_param('ii',$playerid,$friendid);
            $stmt->execute();
            $stmt->bind_result($wins,$games);
            $stmt->fetch();

            if($games == 0){
                $history = $languagestring[165];
            } else {
                $history = $languagestring[168].' '.$wins.' '.$languagestring[169].' '.$games.' '.$languagestring[170];
            }
        }

        $string .= $friendname.','.$friendid.','.$history.','.$profileimg.'^';

    }
} 

$string = substr($string,0, (strlen($string)-1)); 
echo $string.'%';

$stmt->close();

也许可以内联第二个语句,但不知道如何。请提前帮助和感谢:-/

【问题讨论】:

  • 为什么 'friends' 和 'newversus' 与表名相关联?这反而违背了使用关系数据库的目的。

标签: php mysqli prepared-statement


【解决方案1】:

这不是一个准备好的语句是你的问题,而只是一个变量
你只是在重写你的变量,在这种情况下是 $stmt。
为第二个循环命名(并检查其他涉及的变量)

【讨论】:

  • 好的,但是这个怎么样:$stmt = $mysqli->stmt_init();那么我应该每次都开始一个新的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
相关资源
最近更新 更多