已解决:原因Can I parameterize the table name in a prepared statement?
我有一个非常简单的查询来从MySQL中的两列表中收集数据。通常它工作但由于某种原因,我知道收到错误:未定义的偏移量:1
$query_select = ("SELECT ?, ? FROM _HOOFDRUBRIEK");
$stmt = $mysqli->prepare($query_select);
$stmt->bind_param("ss", $column1, $column2);
$stmt->execute();
$stmt->store_result();
//$count = $stmt->num_rows;
//echo $count;
/die();
$stmt->bind_result( $key_hoofdrubriek ,
$descr_hoofdrubriek );
$stmt->fetch();
$hoofdrubriek[] = array('key' =>$key_hoofdrubriek ,
'descr' =>$descr_hoofdrubriek );
//Here I request the variable, what occurs the error
$var = $hoofdrubriek[1]['descr'];
echo 'Show here what's in the var: '.$var ;
有谁知道我为什么会收到此错误,因为从我的角度来看,$ array_name [row] [column]可以调用多维数组;
答案 0 :(得分:1)
你误解了它是如何运作的。结果绑定参数刚刚绑定到所选字段。您仍然需要像往常一样选择普通字段。
此外,您不能将字段名称指定为输入参数。在您的情况下,您选择两个常量值,即您传递的字符串作为输入参数。这就是您在结果中获取字段名称而不是这些字段的值的原因。参数只是字符串值,因此执行的查询将如下所示:
SELECT 'key_hoofdrubriek', 'descr_hoofdrubriek' FROM FROM RGS_HOOFDRUBRIEK
因此,完全跳过问号和输入绑定参数并构建查询,如下所示:
$query_select = ("SELECT key_hoofdrubriek, descr_hoofdrubriek FROM RGS_HOOFDRUBRIEK");
或者,如果必须,可以在语句中使用PHP变量:
$query_select = ("SELECT $column1, $column2 FROM RGS_HOOFDRUBRIEK");
对于阅读,您当然仍然可以使用bind_result
。
答案 1 :(得分:0)
您不能将占位符用于列名称,它们始终被视为表达式。因此,您准备好的查询等同于编写:
SELECT 'key_hoofdrubriek', 'descr_hoofdrubriek' FROM RGS_HOOFDRUBIEK
这只返回表中每行的文字字符串,而不是具有这些名称的列中的值。
如果需要动态确定列名,则必须使用变量替换或连接,不能使用占位符:
$query_select = "SELECT $column1, $column2 FROM RGS_HOOFDRUBRIEK";