mysqli使用fetch_assoc准备语句

Pin*_*rry 5 php sql mysqli

我的目标是能够获得一个变量(使用php)并在准备好的语句中使用它(使用mysqli),然后使用fetch_assoc.由于某种原因,此代码不起作用(没有错误).我rtm并没有找到任何将fetch_assoc与预处理语句相结合的东西,所以我不确定它是否可能.任何有助于实现这一目标的帮助表示赞赏,这是我目前的代码.

$where = $_GET['section'];
            $mysqli = mysqli_connect("localhost", "root", "","test");

            if($stmt = mysqli_prepare($mysqli,"SELECT title, img, active, price FROM ? ORDER by ID limit 5 ")){
                mysqli_stmt_bind_param($stmt, 's', $where);
                mysqli_stmt_execute($mysqli);
                mysqli_stmt_fetch($mysqli);
                 while($row = mysqli_fetch_assoc($stmt)){
                    if($row['active']=="yes"){
                        echo 'the rest of my stuff goes here';
Run Code Online (Sandbox Code Playgroud)

Gar*_*eth 5

mysqli-> prepare的PHP网站页面(重点添加到最相关的部分):

注意:

标记仅在SQL语句中的某些位置是合法的.例如,允许它们在INSERT语句的VALUES()列表中(指定行的列值),或与WHERE子句中的列进行比较以指定比较值.

但是,它们不允许用于标识 SELECT语句要返回的列的选择列表中的标识符(例如表名或列名),或者指定二元运算符的两个操作数,例如=等号.后一种限制是必要的,因为无法确定参数类型.通常,参数仅在数据操作语言(DML)语句中是合法的,而在数据定义语言(DDL)语句中不合法.

假设你可以解决这个问题,你的使用mysqli有点困惑.您正确绑定了参数并执行,但您已经混淆了两种不同的方法来获得结果.或

  1. 使用mysqli_stmt_get_result获取的结果集,然后使用mysqli_fetch_assoc上,或
  2. mysqli_stmt_bind_result使用结果绑定结果,然后使用mysqli_stmt_fetch将下一组结果提取到绑定变量中.(通常你会使用类似的东西来迭代结果while(mysqli_stmt_fetch($stmt)){ //do stuff here }