我的目标是能够获得一个变量(使用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';
答案 0 :(得分:5)
从mysqli->prepare的PHP网站页面(重点添加到最相关的部分):
注意:
标记仅在SQL语句的某些位置是合法的。对于 例如,它们被允许在INSERT语句的VALUES()列表中 (指定行的列值),或与列进行比较 在WHERE子句中指定比较值。
但是,不允许使用标识符(例如表格或列) 名称 ,在选择列表中,用于命名要由a返回的列 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 }
答案 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()){
....
}