我的代码如下:
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多篇文章,似乎没有什么能解释我做错了什么。
注意:这是我的代码的缩小版本。我打算用它来创建一个更通用的对象,从我的数据库中提取信息。
谢谢,
布雷特
答案 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。