我正在尝试使用PHP从数组结构中获取数据库的结果。为此,我使用以下代码:
的config.php :
$mysqli = new mysqli("localhost", "root", "root", "databasename");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
database.class.php :
class database
{
function __construct($mysqli)
{
$this->mysqli = $mysqli;
}
/*
* Utility function to automatically bind columns from selects in prepared statements to
* an array
*/
function bind_result_array($stmt)
{
$meta = $stmt->result_metadata();
$result = array();
while ($field = $meta->fetch_field())
{
$result[$field->name] = NULL;
$params[] = &$result[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
return $result;
}
/**
* Returns a copy of an array of references
*/
function getCopy($row)
{
return array_map(create_function('$a', 'return $a;'), $row);
}
function select($campos, $tabela, $condicao='')
{
$query = 'SELECT '.$campos.' FROM '.$tabela;
if(trim($condicao!='')){
$query.=' WHERE '.$condicao;
}
$stmt = $this->mysqli->prepare($query);
$stmt->execute();
$row = $this->bind_result_array($stmt);
if(!$stmt->error)
{
while($stmt->fetch())
$dados[] = $this->getCopy($row);
}
return $dados;
}
要使用它,我会执行以下操作:
$data = $db->select('*', 'users', 'idlevel = 1 LIMIT 10');
这个$data
将返回一个数组,如下所示:
[1]=>
array(6) {
["id"]=>
int(17)
["nome"]=>
string(13) "Gareth Barlow"
["email"]=>
string(30) "sit.amet@semPellentesqueut.net"
["idnivel"]=>
int(1)
["password"]=>
string(0) ""
["departamento"]=>
NULL
}
[2]=>
array(6) {
["id"]=>
int(20)
["nome"]=>
string(9) "John Lara"
["email"]=>
string(13) "odio@arcu.net"
["idnivel"]=>
int(1)
["password"]=>
string(0) ""
["departamento"]=>
NULL
}
但是,如果我在$data"
行之后立即执行另一个数据库调用,请执行以下操作:
$foo = $db->select('*', 'users', 'idlevel = 2 LIMIT 10');
浏览器尝试返回数据,但在短时间内,它会给我“连接已重置(...)”。
有没有办法执行这些查询并返回两个这样的数组?
好的,我想我找到了解决方案。
function select($campos, $tabela, $condicao='')
{
$query = 'SELECT '.$campos.' FROM '.$tabela;
if(trim($condicao!='')){
$query.=' WHERE '.$condicao;
}
$result = $this->mysqli->query($query);
if ($result = $this->mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
$dados[] = $this->getCopy($row);
}
return $dados;
$result->free();
}
}
这允许我用来做同样的事情,没有错误。 谢谢大家;)
答案 0 :(得分:0)
我认为您需要关闭声明对象...
在选择功能中,
之前return $dados;
制作
$stmt->close();
答案 1 :(得分:0)
如何简单地使用不同的对象?
$db1 = new Database($mysqli);
$data1 = $db->select('*', 'users', 'idlevel = 1 LIMIT 10');
$db2 = new Database($mysqli);
$data2 = $db->select('*', 'users', 'idlevel = 1 LIMIT 10');
class Post extends Eloquent {
它没有解决数据库类中的潜在问题,但它应该花时间寻找替代方案。说实话,你使用的那个看起来并不是很有用。