2010-09-29 89 views
3

嘿, 进出口新的PHP(上周开始) Ive得到的SQLDB IM 10行信息的做同样的事情到所有10:我可以做得更简单吗?

$db_line1 = mysql_query("SELECT * FROM messages WHERE message_id='1'"); 
$line1 = mysql_fetch_array($db_line1); 
unset ($line1['0']); 
unset ($line1['1']); 
unset ($line1['2']); 

$db_line2 = mysql_query("SELECT * FROM messages WHERE message_id='2'"); 
$line2 = mysql_fetch_array($db_line2); 
unset ($line2['0']); 
unset ($line2['1']); 
unset ($line2['2']); 

等等,等等一路$ line10,我可以使用“foreach”函数吗?

+0

你在那儿有什么“不安定”......? – deceze 2010-09-29 09:17:16

+0

以及当我使用mysql_fetch_array时,它返回值的东西两次,一次与collum名称和一次与数字之一。 – Diesal11 2010-09-29 09:19:08

+1

这就是为什么你使用'mysql_fetch_assoc'。 :)仔细阅读说明书:http://php.net/manual/en/function.mysql-fetch-array.php – deceze 2010-09-29 09:21:33

回答

1

编辑下面笔者的评论

采取一切行一次

$db_line = mysql_query("SELECT * FROM messages WHERE message_id >= '1'" . 
          " AND message_id <='10'"); 

    $rows = array(); 

    while ($line = mysql_fetch_assoc($db_line)) 
    { 
     $rows[$line['message_id']] = $line; 
    } 

这种方式你行的数组(即数组的数组)。

要获取一行message_id 3,只是做

$row = $rows[3]; 

和访问(例如)name列,

$row['name'] 

$rows[3]['name'] 
+0

它不是列它的行,我需要每行的所有列,但每行都在它自己的数组, – Diesal11 2010-09-29 09:27:56

+0

哦,未设置是因为我没有指定“MYSQL_ASSOC”在“mysql_fetch_array” – Diesal11 2010-09-29 09:28:31

-1
$db_lines = mysql_query("SELECT * FROM messages"); 
while ($line = mysql_fetch_array($db_lines)) 
{ 
    unset ($line['0']); 
    unset ($line['1']); 
    unset ($line['2']); 
} 
+0

为什么downvotes?在这个例子中重要的是while循环,里面的内容在这一点上是不相关的,并且我采取了问题中提到的操作.... – Tokk 2010-09-29 09:22:07

+1

Tokk,你会不断覆盖$ line。这里也不需要设置。 – halfdan 2010-09-29 09:23:41

+0

我知道,看看它只是一个例子,用循环中的元素做任何事情。也许我应该添加“//示例!!!不要使用它!”对于不了解此含义的人... – Tokk 2010-09-29 09:34:04

3
$query = mysql_query("SELECT * FORM messages"); 
while($result = mysql_fetch_assoc($query)) 
{ 
    echo "<pre>"; 
    print_r($result); 
    echo "</pre>"; 
} 
unset($result); 
+0

提到mysql_error()会很好。 – halfdan 2010-09-29 09:22:51

+0

这工作,但我可以让他们在他们自己的阵列? – Diesal11 2010-09-29 09:24:41

+1

每个'$ result'都是一个数组,来自表'messages'的数据行被提取到它中。这就是为什么我使用'print_r'来显示你。 @halfdan;对不起,真的,但我习惯于使用数据库类,只是调用'MySQL :: Query($ qry);'。我认为'unset'是一个整洁的习惯,它在页面载入结束之前清除内存,导致更快的页面。 (Allthough我从来没有那样做;)) – Ben 2010-09-29 09:26:41

2

回答了评论(“我可以让他们在他们自己的阵列”):

$query = mysql_query("SELECT * FORM messages") or die(mysql_error()); 
$messages = array(); 
while($result = mysql_fetch_assoc($query)) 
{ 
    $messages[] = $result; 
} 
unset($result); 

然后,您可以遍历$ messages。

+0

它的工作,谢谢! – Diesal11 2010-09-29 09:30:49

+1

为什么你会这样做,当$结果是一样的...?这只是将整个$结果数组添加到一个新的数组,如果你,为了什么目的,想要做的只是调用'$ messages = $ result;'... – Ben 2010-09-29 09:32:12

+0

P.提到'mysql_error'会很好;)hehe – Ben 2010-09-29 09:33:47

1

您可以使用动态创建的变量是在PHP:

for ($i = 0; $i < 3; $i++){ 
     unset(${'line'.$i}); 
    } 

编辑: 工作原理(举例):

$var1 = "hel"; 
$var2 = "lo"; 
$hello = "xxx"; 

echo ${$var1.$var2}; // outputs "xxx" 

使用$ { 'XYZ' 变量$}会给你变量名称'xyz'。$ variable。请注意, “'xyz'。$ variable”首先被确定。

+0

以前有人写过类似的东西,它究竟是如何工作的? – Diesal11 2010-09-29 09:32:44

+0

我编辑我的帖子 – Thariama 2010-09-29 09:37:19

+0

啊好的,谢谢! – Diesal11 2010-09-29 10:11:06