从mysql查询php创建数组
Posted
技术标签:
【中文标题】从mysql查询php创建数组【英文标题】:create array from mysql query php 【发布时间】:2011-03-25 19:46:57 【问题描述】:我有一个小问题,我不明白。我有一个拥有所有者和类型的数据库(当然还有更多)。我想获取所有者等于当前用户的所有类型值的列表,但我只得到两个结果
$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 查询来获得所有类型的值。
【问题讨论】:
【参考方案1】:您可能想查看 Wikipedia 上的 SQL 注入文章。查看“十六进制转换”部分,找到一个小函数来执行 SQL 命令并返回一个包含信息的数组。
https://en.wikipedia.org/wiki/SQL_injection
我编写了 dosql() 函数,因为我厌倦了让我的 SQL 命令到处执行,忘记检查错误,并且能够将我的所有命令记录到日志文件中,以便以后在需要时查看.该例程对于任何想将其用于任何目的的人都是免费的。实际上,我已经对函数进行了一些扩展,因为我希望它做更多事情,但是这个基本函数是从 SQL 调用中获取输出的一个很好的起点。
【讨论】:
【参考方案2】: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
【讨论】:
是的!这是正确的方式。 他没有使用 mysqli 他使用的是旧版 mysql 旧版 mysql?您一定是指已弃用的 Mysql。 是的 旧 mysql - 比答案相关的版本旧【参考方案3】:$type_array = array();
while($row = mysql_fetch_assoc($result))
$type_array[] = $row['type'];
【讨论】:
【参考方案4】:这通常在while
循环中完成:
$types = array();
while(($row = mysql_fetch_assoc($result)))
$types[] = $row['type'];
查看documentation 中的示例。
mysql_fetch_*
方法将始终获取结果集的 next 元素:
返回对应于获取行的字符串数组,如果没有更多行,则返回 FALSE。
这就是while
循环起作用的原因。如果没有任何行,$row
将是 false
并且存在 while
循环。
似乎mysql_fetch_array
得到的结果不止一行,因为默认情况下它得到的结果为normal and as associative value:
通过使用 MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。
您的示例显示得最好,您得到相同的值18
,您可以通过$v[0]
或$v['type']
访问它。
【讨论】:
【参考方案5】:您还可以使用包装器让生活更轻松,例如使用 ADODb:
$myarray=$db->GetCol("SELECT type FROM cars ".
"WHERE owner=? and selling=0",
array($_SESSION['username']));
一个好的包装器也会为你做所有的转义,让事情更容易阅读。
【讨论】:
【参考方案6】:while($row = mysql_fetch_assoc($result))
echo $row['type'];
【讨论】:
他的代码已经在这样做了。他希望它变成一个数组。回声并不能解决这个问题。【参考方案7】:您确实需要遍历...
$typeArray = array();
$query = "select * from whatever";
$result = mysql_query($query);
if ($result)
while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type'];
【讨论】:
以上是关于从mysql查询php创建数组的主要内容,如果未能解决你的问题,请参考以下文章