我使用这个数据库MySQLi包装器:
Class dbWrapper {
protected $_mysqli;
protected $_debug;
public function __construct($host, $username, $password, $database, $debug) {
$this->_mysqli = new mysqli($host, $username, $password, $database);
$this->_mysqli->set_charset("utf8");
$this->_debug = (bool) $debug;
if (mysqli_connect_errno()) {
if ($this->_debug) {
echo mysqli_connect_error();
debug_print_backtrace();
}
return false;
}
return true;
}
public function q($query) {
if ($query = $this->_mysqli->prepare($query)) {
if (func_num_args() > 1) {
$x = func_get_args();
$args = array_merge(array(func_get_arg(1)),
array_slice($x, 2));
$args_ref = array();
foreach($args as $k => &$arg) {
$args_ref[$k] = &$arg;
}
call_user_func_array(array($query, 'bind_param'), $args_ref);
}
$query->execute();
if ($query->errno) {
if ($this->_debug) {
echo mysqli_error($this->_mysqli);
debug_print_backtrace();
}
return false;
}
if ($query->affected_rows > -1) {
return $query->affected_rows;
}
$params = array();
$meta = $query->result_metadata();
while ($field = $meta->fetch_field()) {
$params[] = &$row[$field->name];
}
call_user_func_array(array($query, 'bind_result'), $params);
$result = array();
while ($query->fetch()) {
$r = array();
foreach ($row as $key => $val) {
$r[$key] = $val;
}
$result[] = $r;
}
$query->close();
return $result;
} else {
if ($this->_debug) {
echo $this->_mysqli->error;
debug_print_backtrace();
}
return false;
}
}
public function handle() {
return $this->_mysqli;
}
}
但是当我进行查询时,例如SELECT This FROM Database,我想显示结果,我必须回显$ result [0] [' This']。为什么?为什么不结果['这']?我改变了这个:
$result = array();
while ($query->fetch()) {
$r = array();
foreach ($row as $key => $val) {
$r[$key] = $val;
}
$result[] = $r;
}
$query->close();
return $result;
到此:
$result = array();
while ($query->fetch()) {
foreach ($row as $key => $val) {
$result[$key] = $val;
}
$result[] = $r;
}
$query->close();
return $result;
但为什么我看到的所有包装器返回一个多维数组?
希望你了解我。谢谢!答案 0 :(得分:1)
通常,当您从数据库查询中收集结果时,您有多行。
--------------
- 1 --- This -
- 2 --- That -
--------------
所以你得到一个多维数组,以便处理一个对象中的所有行。
......这不是这种情况吗?
修改强>
$result = array();
while ($query->fetch()) {
$r = array();
foreach ($row as $key => $val) {
$r[$key] = $val;
}
$result[] = $r;
}
$query->close();
return $result;
在上面的代码中,您将每个单独的行分配给$ results数组中的索引。要访问它们,您需要提供$ results [ROW_NUMBER] [KEY_NAME];
这有意义吗?
答案 1 :(得分:1)
它们返回多维数组的原因是因为您可以有多个结果。
所以:
$data[0]['name'] is the first returned records name.
$data[1]['name'] is the second returned records name.
您可以创建一个fetchRow()
函数,当您只需要一行时,它将始终只返回第一条记录
return $data[0]
OR
一个fetchOne()
return $data[0]['name']
当你只期望一个字段时
答案 2 :(得分:0)
我打算试一试并说尝试$ query-> fetch_row()而不是$ query-> fetch()(只是猜测)