我是PHP的新手,所以我不确定它是如何工作的。
无论如何,我会将多维数组返回给另一个方法,主要是存储少量记录和列,类似于结构的表。
我写了以下内容,没有警告但没有数据
public function GetData($sqlquery)
{
include 'config.php';
$result = mysql_query($sqlquery,$con);
$data = array();
while($row = mysql_fetch_assoc($result))
{
$data[] = $row;
}
return $data;
}
最有可能做一些愚蠢的事情
帮助表示赞赏。
修改
感谢所有快速回复
我弄清楚为什么这不起作用,我正在解决这个问题
print $data[0][0];
而不是
print $data[0]['title'];
例如,谢谢大家:))
PS我真的很难相信你不能说$ data [0] [5],IMO比为位置指定字符串值更合乎逻辑
答案 0 :(得分:3)
您的代码似乎没问题。至少,你正朝着正确的方向前进。
只是一些小修正:
所以,
public function GetData($sqlquery)
{
$data = array();
$result = mysql_query($sqlquery) or trigger_error(mysql_error().$sqlquery);
if ($result)
{
while($row = mysql_fetch_assoc($result))
{
$data[] = $row;
}
}
return $data;
}
运行此代码并查看其内容。
答案 1 :(得分:1)
如果使用mysqli扩展而不是mysql,则可以使用fetch_all(),这比在循环中填充数组要快。所以你的函数只需要返回fetch_all()
的结果return $result->fetch_all(MYSQLI_ASSOC);
<强>脚本强>
<?php
ob_start();
try
{
$db = new mysqli("localhost", "foo_dbo", "pass", "foo_db", 3306);
if ($db->connect_errno)
throw new exception(sprintf("Could not connect: %s", $db->connect_error));
$sqlCmd = "select * from users order by username";
$startTime = microtime(true);
$result = $db->query($sqlCmd);
if(!$result) throw new exception(sprintf("Invalid query : %s", $sqlCmd));
if($result->num_rows <= 0){
echo "no users found !";
}
else{
$users = $result->fetch_all(MYSQLI_ASSOC); //faster
//while($row = $result->fetch_assoc()) $users[] = $row; //slower
echo sprintf("%d users fetched in %s secs<br/>",
count($users), number_format(microtime(true) - $startTime, 6, ".", ""));
foreach($users as $u) echo $u["username"], "<br/>";
}
// $result->close();
}
catch(exception $ex)
{
ob_clean();
echo sprintf("zomg borked - %s", $ex->getMessage());
}
//finally
if(!$db->connect_errno) $db->close();
ob_end_flush();
?>
<强>测试强>
//fetch_all()
1000 users fetched in 0.001462 secs
5000 users fetched in 0.005493 secs
15000 users fetched in 0.015517 secs
50000 users fetched in 0.051950 secs
100000 users fetched in 0.103647 secs
//fetch_assoc plus loop
1000 users fetched in 0.001945 secs
5000 users fetched in 0.008101 secs
15000 users fetched in 0.023481 secs
50000 users fetched in 0.081441 secs
100000 users fetched in 0.163282 secs
答案 2 :(得分:0)
也许我错了,如果所有这些都发生在config.php
,但我想,你错过了几步:
创建连接:
$con = mysql_connect("localhost", "mysql_user", "mysql_password");
选择数据库:
mysql_select_db("mydbname");
在此之后,mysql_query
来了。但是你说没有警告,所以我想,你做了这一切。
我会做这样的事情(有更好,更复杂的解决方案):
include 'config.php'; // contains definition of $conf array
$con = mysql_connect($conf['host'], $conf['user'], $conf['pass']);
mysql_select_db($conf['db']);
function GetData($sqlquery)
{
global $con;
$result = mysql_query($sqlquery,$con);
$data = array();
while($row = mysql_fetch_assoc($result))
{
$data[] = $row;
}
return $data;
}