0

わかりました、私はこれを持っていると思っていましたが、なぜそれが機能していないのかわかりません... 変数テーブルを持つ 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();
4

1 に答える 1

1

テーブル名をバインドできません。Bind_param は、列名とそのデータ型を受け入れます。

テーブル名を動的に使用するには、次のコードを使用します。

$stmt = $mysqli->prepare("SELECT * FROM ".$table);
于 2013-07-19T20:41:02.923 に答える