在 PHP-MYSQL 中使用 `fetch_assoc()` 在准备好的语句中使用多个 `WHERE` 子句打印由 `SELECT *` 设置的结果的正确方法是什么?

What is the correct way of printing results set by `SELECT *` with multiple `WHERE` clauses in prepared statements using `fetch_assoc()` in PHP-MYSQL?

我的查询如下:

$query = 'SELECT * FROM `table_name` WHERE `uid` = ? AND `email` = ?';
$stmt_select = $conn->prepare($query);
$stmt_select->bind_param('is', $user_id, $user_email);
$user_id = $_SESSION['uid'];
$user_email = $_SESSION['user_email'];
$result = $stmt_select->execute();

我想使用 fetch_assoc 打印结果集,这是因为我不想 bind_result() 所有 23 列的名称,我想使用 $row['column_name'] 打印它,实现它的正确方法是什么?

如果你想看我的代码,我在这里问了另一个问题: How to SELECT * with multiple WHERE using fetch_assoc in prepared statements in PHP-MYSQL?

但是没有得到正确的回答,所以你能告诉我实现它的最佳方法是什么而不是更正我的代码吗?

我在 mysqli 中使用 SELECT * 时遇到了同样的问题。问题在于 bind_result 部分。通常您需要添加许多变量。这意味着如果您有大约 20 列,则需要在 bind_result 语句中包含 20 个变量。

我已经定制了我的解决方案来解决您的问题。

  $query = 'SELECT * FROM `table_name` WHERE `uid` = ? AND `email` = ?';
    $stmt_select = $conn->prepare($query);
    $stmt_select->bind_param('is', $user_id, $user_email);
    $user_id = $_SESSION['uid'];
    $user_email = $_SESSION['user_email'];
    $result = $stmt_select->execute();
   $stmt_select->store_result();//after this line we can output the number of rows if you need to check that as well
   $number_of_rows = $stmt_select->num_rows;
   $meta = $stmt_select ->result_metadata();
   $parameters = array();
  $results = array();
  while ($field = $meta->fetch_field()) {
         $parameters[] = &$row[$field->name];
  }
  call_user_func_array(array($stmt_select , 'bind_result'), $parameters);
       while ($stmt_select ->fetch()) {
             foreach ($row as $key => $val) {
                  $x[$key] = $val; //here we get the key => value (Column => Value)
                      }
                      $results[] = $x; //lets grab everything here
                  }
print_r($results);