mysqli使用fetch_assoc准备语句

时间:2012-05-24 21:57:57

标签: 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';

2 个答案:

答案 0 :(得分:5)

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

  

注意:

     

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

     

但是,不允许使用标识符(例如表格或列)   名称 ,在选择列表中,用于命名要由a返回的列   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 }
  3. 的东西来迭代结果

答案 1 :(得分:-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()){
....
}