Mysqli与fetch_assoc一起准备了声明


mysqli prepared statement with fetch_assoc

我的目标是能够获取一个变量(使用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';

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

注意:

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

但是,不允许使用标识符(例如表或列) names) 中,在命名要由 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 }

另一种方式风格,我们可以在下面写:

$mysqli=new mysqli("host","user","pass","db");
$stmt = $mysqli->prepare($query);
$stmt->bind_param('s', $variable);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()){
....
}