[英]create array from mysql query php
我有一点我不明白的问题。 我有一个拥有所有者和类型的数据库(当然还有更多)。 我想得到一个列表,其中包含所有者等于当前用户的所有类型值,但我只得到两个结果
$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' ORDER BY id DESC ";
$result = mysql_query($sql,$con);
print_r(mysql_fetch_array($result));
打印出来:
Array ( [0] => 18 [type] => 18 )
和
$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' ";
打印出来:
Array ( [0] => 16 [type] => 16 )
结果应该是数组中的19,19,18,17,16。 这就是我设置为所有者的所有类型。
我现在有这个工作:
for ($x = 0; $x < mysql_num_rows($result); $x++){
$row = mysql_fetch_assoc($result);
echo $row['type'];
}
这里我正确地打印出所有值,但是我需要创建一个包含所有值的数组。 我虽然可以使用array_push,但大多数都有更好的方法。 我以为我会通过简单的mysql查询获得所有类型值。
通常这是在while
循环中完成的:
$types = array();
while(($row = mysql_fetch_assoc($result))) {
$types[] = $row['type'];
}
看一下文档中的示例。
mysql_fetch_*
方法将始终获取结果集的下一个元素:
返回与获取的行对应的字符串数组,如果没有更多行,则返回FALSE。
这就是while
循环工作的原因。 如果没有任何行, $row
将为false
并且while
循环存在。
似乎mysql_fetch_array
只有多行,因为默认情况下它会获得正常的结果和关联值 :
通过使用MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。
您的示例最佳显示,您获得相同的值18
,您可以通过$v[0]
或$v['type']
访问它。
THE CORRECT WAY ************************ THE CORRECT WAY
while($rows[] = mysqli_fetch_assoc($result));
array_pop($rows); // pop the last row off, which is an empty row
你需要迭代......
$typeArray = array();
$query = "select * from whatever";
$result = mysql_query($query);
if ($result) {
while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type'];
}
您可能想查看Wikipedia上的SQL注入文章。 查看“十六进制转换”部分,找到一个小函数来执行SQL命令并返回包含其中信息的数组。
https://en.wikipedia.org/wiki/SQL_injection
我编写了dosql()函数,因为我厌倦了让我的SQL命令在所有地方执行,忘记检查错误,并能够将我的所有命令记录到日志文件中以供以后查看(如果需要)。 对于任何想要将其用于任何目的的人而言,该例程是免费的。 我实际上已经扩展了这个功能,因为我希望它能做得更多但是这个基本功能是从SQL调用中获取输出的一个很好的起点。
$type_array = array();
while($row = mysql_fetch_assoc($result)) {
$type_array[] = $row['type'];
}
while($row = mysql_fetch_assoc($result)) {
echo $row['type'];
}
您还可以使用包装器使生活更轻松,例如使用ADODb:
$myarray=$db->GetCol("SELECT type FROM cars ".
"WHERE owner=? and selling=0",
array($_SESSION['username']));
一个好的包装器也会为你做所有的逃避,让事情更容易阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.