Mysqli与未知的bind_results

时间:2013-07-19 20:28:25

标签: php mysqli

好吧,我以为我有这个,但我不明白为什么它不起作用...... 我有一个带有变量表的SELECT,因此我的列(bind_result)将是可变的。 我需要针对任何数量的列进行调整,并将其作为关联数组进行提取,因为会有多行返回:

// Get table data
$mysqli = new mysqli('host','login','passwd','db');
if ($mysqli->connect_errno()) { $errors .= "<br>Cannot connect: ".$mysqli->connect_error()); }
$stmt = $mysqli->prepare("SELECT * FROM ?");
$stmt->bind_param('s', $table);
$stmt->execute();

// Get bind result columns
$fields = array();
// Loop through columns, build bind results
for ($i=0; $i < count($columns); $i++) {
$fields[$i] = ${'col'.$i};
}

// Bind Results
call_user_func_array(array($stmt,'bind_result'),$fields);

// Fetch Results
$i = 0;
while ($stmt->fetch()) {
  $results[$i] = array();
  foreach($fields as $k => $v)
     $results[$i][$k] = $v;
  $i++;
}

// close statement
$stmt->close();

非常感谢任何想法^ _ ^

编辑:新代码:

$mysqli = new mysqli('host','login','passwd','db');
if ($mysqli->connect_errno)) { $errors .= "<br>Cannot connect: ".$mysqli->connect_error()); }
$stmt = "SELECT * FROM ".$table;

if ($query = $mysqli->query($stmt)) {
$results = array();
while ($result = $query->fetch_assoc()) {
    $results[] = $result;
}
$query->free();
}
$mysqli->close();

1 个答案:

答案 0 :(得分:1)

您无法绑定表名。 Bind_param接受列名及其数据类型。

要动态使用表名,请使用以下代码:

$stmt = $mysqli->prepare("SELECT * FROM ".$table);