做类似" mysqli_fetch_array"准备好的陈述。 PHP MYSQL

时间:2016-12-14 18:50:00

标签: php mysql prepared-statement

过去两天我一直试图解决这个问题而没有运气。出于安全原因,我正在转换为准备好的陈述,并且我试图显示评论。在最近的过去,通过准备好的陈述,我只能展示一篇评论,尽管有很多。在试图找出它之后,我转向了旧方式(不安全的方式)并且它按预期工作。这是有效的代码(不安全的方式):

$sql = "SELECT rate, title, date, review, recommend, helpful, username FROM rating INNER JOIN users ON rating.user_id = users.id";
$query = mysqli_query($db, $sql);
$statusnumrows = mysqli_num_rows($query);

// Gather data about parent pm's
if($statusnumrows > 0){
    while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
        $rate = $row["rate"];
        $title = $row["title"];
   }
}

//Info is displayed :) 
 $table1 .= '
            <li>
                <span style="display: inline-flex;" class="stars">'.$rate.'</span><span id="review_title">'.$title.'</span>
            </li>

我喜欢将变量分配给行,因此我可以在需要时回显变量。

现在,试着在准备好的陈述中得到相同的结果......这是另一个故事。这是许多不起作用的尝试之一:

$sql = "SELECT rate, title, date, review, recommend, helpful, username FROM rating INNER JOIN users ON rating.user_id = users.id";
$stmt = $db->stmt_init();
if($stmt = $db->prepare($sql)){
    if($stmt->execute()){
        $result = $stmt->get_result();
        $a = $result->fetch_array(MYSQLI_ASSOC);
        echo $a;
    }else{
        echo "Didn't work.";
    }

   $table1 .= '
        <li>
            <span style="display: inline-flex;" class="stars">'.$rate.'</span><span id="review_title">'.$title.'</span>
        </li>

有谁知道我如何能够显示所有评论(与 mysqli_fetch_array 一样),但是使用准备好的语句会更安全吗?

1 个答案:

答案 0 :(得分:0)

我用这种方式

$stmt = $db->prepare("SELECT name, xp FROM users");
if($stmt->execute()){
    $stmt->bind_result($name, $xp);
    while($stmt->fetch()){
        echo $name . ' has ' . $xp . ' xp.';
    }
}else{
    echo "Didn't work.";
}