我想将sql查询结果放入数组中。 我尝试了下面的代码,但它显示了$ count次的第一条记录。 显然,“$ dept [$ i] = $ row ['name'];”是错误的。“ 但我不知道如何解决它。 有人帮忙吗?
$sql="SELECT name FROM system_dept ORDER BY id";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
$count=mysql_num_rows($result);
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
else
{
$dept = array();
$i=0;
for($i=0;$i<$count;$i++)
{
$dept[$i]= $row['name'];
echo $dept[$i];
}
}
好的,我尝试使用mysqli,但它不起作用。 Web服务器显示: MySQL客户端版本:4.1.22 PHP扩展:mysql mysqli可以在mysql php扩展中工作吗?
答案 0 :(得分:5)
为什么在实际需要所有行时只提取一行?
使用mysqli:
$db = new mysqli("localhost", "foo_dbo", "pass", "foo_db");
$result = $db->query("SELECT name FROM system_dept ORDER BY id");
$names = $result->fetch_all(MYSQLI_ASSOC);
使用PDO:
$db = new PDO('mysql:dbname=foo_db;dbhost=localhost', 'foo_dbo', 'pass');
$stmt = $db->query("SELECT name FROM system_dept ORDER BY id");
$names = $stmt->fetchAll(PDO::FETCH_ASSOC);
这导致与其他答案相同的结果,但没有循环!它更快! 如果逐行获取,则速度较慢,但根据您的操作,您将需要更少的内存。如果要将每一行存储在一个数组中,情况就不是这样了。因此,获取所有内容是可行的方法。
答案 1 :(得分:3)
$dept = array();
$result = mysql_query('SELECT name FROM system_dept ORDER BY id');
while ($row = mysql_fetch_assoc($result))
{
$dept[] = $row['name'];
echo $row['name'];
}
请不要使用mysql_*
函数来编写新代码。它们已不再维护,社区已经开始deprecation process。查看 red box ?相反,您应该了解prepared statements并使用PDO或MySQLi。如果您无法确定哪个,this article会对您有所帮助。如果您选择PDO,here is good tutorial。另请参阅Why shouldn't I use mysql
functions in PHP?
答案 2 :(得分:1)
您只需获取一行来获取更多行,您需要再次调用获取结果 所以只需将其添加到您的代码中,事情应该没问题:
for($i=0;$i<$count;$i++)
{
$dept[$i]= $row['name'];
echo $dept[$i];
$row=mysql_fetch_array($result);
}
我建议使用while循环,如下所示:
$sql="SELECT name FROM system_dept ORDER BY id";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
else
{
$dept = array();
while($row=mysql_fetch_array($result))
{
$dept[]=$row['name'];
echo $row['name'];
}
}
如果可能的话,请查看mysqli和PDO,因为它们都更有效率