Я не знаю, чего не хватает или почему он не отображает данные. Мой код работает, если я не использую подготовленные операторы. Когда я использовал подготовленные заявления, кажется, что код больше не работает.
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; }
}