使用mysql预处理语句获取行有问题


Having Issue on Fetching Rows Using MySQLi Prepared Statement

我试图通过使用以下准备好的语句从MySQL数据库获得一些数据。但是我有两个问题:

1-代码只返回最后一行的值,但正如你所看到的,我使用的是在

处的$stmt->fetch()的while迭代器
while($stmt->fetch());{
    echo  '<option value="'.$uid.'">'.$name.'</option>';
}

2 -另一件事是当我尝试在代码片段2使用if($stmt->num_rows > 0){}时,我得到无法找到数据消息!

 <?php
     $conn = new mysqli('localhost', 'root', '', 'dbmodel');
     if ($conn->connect_error) {
         die("Connection Failed: " . $conn->connect_error);
     }
     $sql = 'SELECT uid, name  FROM `single-animals-tbl`';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $stmt->bind_result($uid,$name);
 ?> 
 <select>
     <option value="0">Select From The List</option>  
     <?php 
         while($stmt->fetch());{
             echo  '<option value="'.$uid.'">'.$name.'</option>';
         }
         $stmt->close();
         $conn->close();
     ?> 
 </select> 

代码段2与if($stmt->num_rows > 0){}

<?php
    $conn = new mysqli('localhost', 'root', '', 'dbmodel');
    if ($conn->connect_error) {
        die("Connection Failed: " . $conn->connect_error);
    }
    $sql = 'SELECT uid, name  FROM `single-animals-tbl`';
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $stmt->bind_result($uid,$name);
    if($stmt->num_rows > 0){
    ?> 
        <select>
            <option value="0">Select From The List</option>  
            <?php 
                while($stmt->fetch());{
                    echo  '<option value="'.$uid.'">'.$name.'</option>';
                 }
                }else {
                     echo "Cant' Find Data";
                 }
                $stmt->close();
                $conn->close();
            ?> 
        </select> 
关于你的第一个问题:while循环后面有一个冒号。所以它相当于
while($stmt->fetch())
{
    ;
}
{
    echo  '<option value="'.$uid.'">'.$name.'</option>';
}

删除它,它应该可以工作

尝试使用get_result代替bind_result,并继续使用mysqli_fetch_assoc代替

注:这将需要安装mysqlnd