我只是想知道如何能够编写执行SQL查询的代码,然后将每一行放入一个新数组中,例如,假设一个表如下所示:
$people= mysql_query("SELECT * FROM friends")
输出:
| ID | Name | Age |
--1----tom----32
--2----dan----22
--3----pat----52
--4----nik----32
--5----dre----65
我怎样才能创建一个以下列方式工作的多维数组,第一行第二列数据可以使用$ people [0] [1]访问,第五行第三列可以使用$ people [4] [ 2]。
我将如何构建这种类型的数组?
很抱歉,如果这是一个奇怪的问题,它只是我不熟悉PHP + SQL,并想知道如何直接访问数据。性能和速度不是问题,因为我只是编写小型测试脚本来掌握该语言。
答案 0 :(得分:7)
$rows = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$rows[] = $row;
}
答案 1 :(得分:1)
您是否愿意使用数据库模块,例如PEAR::DB模块?如果是这样,请查看使用PHP的Pear DB模块编写脚本的this article by Paul Dubois。该模块已经superseded,但它将向您展示一些更高级(和更常见的)数据库实践的基础知识。
至于你的实际问题,你可以遍历所有行并填充数组......
$dsn = "mysqli://testuser:testpass@localhost/test";
$conn =& DB::connect ($dsn);
if (DB::isError ($conn)) { /* ... */ }
$result =& $conn->query ("SELECT * FROM friends");
if (DB::isError ($result)){ /* ... */ }
while ($row =& $result->fetchRow()) {
$people[] = $row;
}
$result->free ();
或者你可以编写一个实现ArrayAccess interface的对象,在引用该索引时请求一个特定的行。 (这段代码可能完全错误,但这是我的尝试)
class FriendsTable implements ArrayAccess {
function offsetGet($key) {
$result =& $conn->query ("SELECT * FROM friends LIMIT $key, 1",); // careful; this is vulnerable to injection...
if (DB::isError ($result)){ die ("SELECT failed: " . $result->getMessage () . "\n"); }
$people = null;
if ($row =& $result->fetchRow ()) {
$people = $row;
}
$result->free ();
return $people;
}
function offsetSet($key, $value) {
/*...*/
}
function offsetUnset($key) {
/*...*/
}
function offsetExists($offset) {
/*...*/
}
}
$people = new FriendsTable();
$person = $people[2]; // will theoretically return row #2, as an array
......或其他什么。
答案 2 :(得分:0)
$array = array();
$sql = "SELECT * FROM friends";
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
while($row = mysql_fetch_assoc($res)) $array[]=$row;