подготовленный метод заявления.

Я не знаю, чего не хватает или почему он не отображает данные. Мой код работает, если я не использую подготовленные операторы. Когда я использовал подготовленные заявления, кажется, что код больше не работает.

db.php

Class Database{ public $mysqli; public function __construct($db_host, $db_user, $db_password, $db_name){ $this->con = new mysqli($db_host, $db_user, $db_password, $db_name); } public function selectUserInfo($id){ $stmt = $this->con->prepare("SELECT * FROM users WHERE os_id = ?"); $stmt->bind_param("s", $id); if($stmt->execute() == FALSE){ trigger_error($stmt->error, E_USER_ERROR); }else{ $data = array(); while($row = $stmt->fetch()){ $data[] = $row; } return $data; } } } 

config.php

 define("DBHOST","somehost"); define("DBUSER","someroot"); define("DBPASS","somepassword"); define("DB","my_database"); 

так я бы показал его на моей странице.

 require 'global/db.php'; require_once 'config.php'; $db = new Database(DBHOST, DBUSER, DBPASS, DB); $data = $db->selectUserInfo($_GET['name']); foreach ($data as $key) { # code... echo $key['os_fname']; } 

Как мы определили, проблема была foreach с вашим foreach .

Что не так, так это то, как вы его читаете, fetch не имеет ассоциативных свойств, поэтому вам нужно использовать bind_result .

Вот хак, который также предлагается в руководстве по fetch :

 public function selectUserInfo($id) { $stmt = $this->con->prepare("SELECT * FROM users WHERE os_id=?"); $stmt->bind_param('i', $id); if(!$stmt->execute()) { trigger_error($stmt->error, E_USER_ERROR); } else { $bindVarArray = array(); $data = array(); $result; $meta = $stmt->result_metadata(); while ($column = $meta->fetch_field()) { $columnName = str_replace(' ', '_', $column->name); $bindVarArray[] = &$result[$columnName]; } call_user_func_array(array($stmt, 'bind_result'), $bindVarArray); $index = 0; while ($stmt->fetch() != null) { foreach ($result as $k => $v) { $data[$index][$k] = $v; } $index++; } return $data; } } 

Затем вы можете использовать свой foreach чтобы прочитать его следующим образом:

 foreach ($data as $result) { echo $result['os_fname'], ' => ', $result['os_lname'], "\n"; } 

И вы всегда можете использовать print_r чтобы увидеть, как выглядит ваш результирующий массив:

 print_r($data); 

ваш тип od_id в БД является строкой или целым числом? если целое число

 public function selectUserInfo($id){ $stmt = $this->con->prepare("SELECT * FROM users WHERE os_id = ?"); $stmt->bind_param("i", $id);//use 'i' instead of 's' if($stmt->execute() == FALSE){ trigger_error($stmt->error, E_USER_ERROR); }else{ $data = array(); while($row = $stmt->fetch()){ $data[] = $row; } return $data; } 

}