我的目标是能够获取一个变量(使用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
的使用有点混乱。您正确地绑定了参数并执行,但混淆了两种不同的结果获取方式。也
- 使用
mysqli_stmt_get_result
获取结果集,然后对其使用mysqli_fetch_assoc
,或者 - 将结果与
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()){
....
}