来自php函数Mysql的错误输出

时间:2012-03-21 03:57:44

标签: php mysql arrays function

我的代码如下:

class Database  
{  
    private $db_host;  
    private $db_user;  
    private $db_pass;  
    private $db_name;  
    private $con;

    public function __construct() {
        $this->db_host = "localhost";  
        $this->db_user = "admin";  
        $this->db_pass = 'password';  
        $this->db_name = 'test';    
        $this->con = '';
    }

    public function connect() {
        $db_name = "test";    
        $this->con = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
    }  

    public function select(){
        $q = "SELECT name, city FROM customers;";
        mysql_select_db($this->db_name, $this->con);
        $result = mysql_query($q);
        return mysql_fetch_assoc($result);
    }  
} 


$db = new Database();
$db->connect();
$tempArray = Array();
$rs = $db->select('customers', 'name, suburb');
foreach ($rs as $row)
{
    echo $rs['name'] . "<br>";
}

我的表格数据是

name | city
--------------
Anne | Sydney
Jane | London

实际输出是:

Anne 
Anne

所需的输出是:

Anne
Jane

有人可以告诉我我做错了什么。好像我错过了一些基本的东西。我已阅读了50多篇文章,似乎没有什么能解释我做错了什么。

注意:这是我的代码的缩小版本。我打算用它来创建一个更通用的对象,从我的数据库中提取信息。

谢谢,

布雷特

5 个答案:

答案 0 :(得分:1)

您需要为每个行调用mysql_fetch_assoc。它只返回一行数据,而不是整个数据。例如,您可以将其移出循环:

class Database
{  
    /* ... */

    public function select(){
        $q = "SELECT name, city FROM customers;";
        mysql_select_db($this->db_name, $this->con);
        return mysql_query($q);
        /* Remove your line here, returning the query result, not the first row */
    }  
} 

$db = new Database();
$db->connect();
$tempArray = Array();
$result = $db->select('customers', 'name, suburb');
/* Note that I'm now using mysql_fetch_assoc to get each row from the result */
while ($row = mysql_fetch_assoc($result));
    echo $row['name'] . "<br>";
}

您可以在那里使用while循环,因为在检索到最后一行之后,mysql_fetch_assoc将返回FALSE并退出循环。

答案 1 :(得分:0)

在代码的这一部分:

return mysql_fetch_assoc($result);

您只是返回第一行。我建议你创建一个数组。

public function select(){
    $q = "SELECT name, city FROM customers;";
    mysql_select_db($this->db_name, $this->con);
    $result = mysql_query($q);
    $toReturn = array();
    while($row = mysql_fetch_assoc($result) )
        $toReturn[] = $row;
    return $toReturn;
}

答案 2 :(得分:0)

不应该是:


foreach ($rs as $row)
{
    echo $row['name'] . "<br>";
}


$resArr = array();
while($res = mysql_fetch_assoc($result)) {
  $resArr[] = $res;
}
return $resArr;

答案 3 :(得分:0)

你班级的理智版本。它当然缺乏重要的部分,在现实生活中使用,但只是在你的草图之外:

class Database  
{  
    private $con;

    public function __construct() {
        $this->con = mysql_connect("localhost", "admin", 'password');
        mysql_select_db("test",$this->con);
    }
    public function query($sql,$this->con){
        return mysql_query($sql);
    }  
    public function get_all($sql,$this->con){
        $ret = array();
        $res = mysql_query($sql);
        while  ($row = mysql_fetch_array($row)) {
          $ret[] = $row;
        }
        return $ret;
    }  
} 

$db = new Database();
$rs = $db->get_all("SELECT name, city FROM customers");
foreach ($rs as $row)
{
    echo $rs['name'] . "<br>";
}

答案 4 :(得分:0)

看起来很奇怪,没有人在这里的代码中找到了一点点。

您可以像这样定义select()

public function select(){
    $q = "SELECT name, city FROM customers;";
    mysql_select_db($this->db_name, $this->con);
    $result = mysql_query($q);
    return mysql_fetch_assoc($result);
}

但是,你这样称呼它:

$rs = $db->select('customers', 'name, suburb');

我假设您的意图是能够指定要从数据库中选择的表和字段。如果是,您的select函数看起来应该更像这样:

public function select($table, $fields){
    $q = "SELECT $fields FROM $table;";
    mysql_select_db($this->db_name, $this->con);

    return mysql_query($q);
} 

从那里你会在他的回答中关注@ BenLee的例子,因为你需要迭代结果集。每个字段都成为关联数组中的键。

我不建议在生产代码中实际执行这样的字符串插入,但我认为它更接近你的意图。

HTH。