5

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

2 回答 2

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 }
于 2012-05-24T22:20:30.917 回答
-2

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

$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()){
....
}
于 2015-09-08T03:32:26.037 回答