Hiçbiri yoksa PHP, yinelenen satırları echo

4 Cevap php
<html>
<head>
<title>Test</title>
<link rel="stylesheet" type="text/css" href="style.css"> 
</head>
<body>
	<?php 
	   $username ="matt";
	   $pass = "bs12kfj";
	   $db = "mytest";
	   $tbl = "test2";
	   mysql_connect(localhost,$username,$pass);
	   mysql_select_db($db) or die( "Unable to select database");
	   $res = mysql_query("SELECT * FROM test2;");
	   $num = mysql_numrows($res);
	   echo "<table border='2'><tr>The Peeps</tr>"; 
	   while ($r = mysql_fetch_array($res)) {
		 echo "<tr>";
         foreach($r as $rs){
                     echo "<td>$rs</td>";
                     }
		 echo "</tr>";
	   }
	   ?>

</body>

Bu kod hatasız yürütür ama çıkış öylesine gibi her satırın her sütunun bir kopyasını içerir.

<table border='2'><tr>The Peeps</tr>
<tr><td>"matt"</td><td>"matt"</td><td>"phillips"</td><td>"phillips></td><td>"mathew.p@waburg.com"</td><td>"mathew.p@waburg.com"</td><td>20</td><td>20</td></tr><tr><td>"paul"</td><td>"paul"</td><td>"franklin"</td><td>"franklin"</td><td>"dude@live.com"</td><td>"dude@live.com"</td><td>30</td><td>30</td></tr><tr><td>"steve"</td><td>"steve"</td><td>"jobs"</td><td>"jobs"</td><td>"sjobs@apple.com"</td><td>"sjobs@apple.com"</td><td>23</td><td>23</td>

I don't understand why each column is duplicated when there is only a single <td></td> tag in the echo statement.
I also checked the db and the table does not contain duplicate entries.

4 Cevap

Muhtemelen MYSQL_BOTH varsayılan modda MySQL sonuç dizisi getiriliyor edilir.

Bu deneyin:

while ($r = mysql_fetch_array($res,MYSQL_ASSOC)) {
             echo "<tr>";
     foreach($r as $rs){
                 echo "<td>$rs</td>";
                 }
             echo "</tr>";
       }

Eğer mysql_fetch_array(), sonra da MYSQL_BOTH kullanıldığı için, ikinci bağımsız değişkeni belirtmezseniz, ve bu gibi değerlerin bir ilişkisel dizi indeksi, ve bir sayısal dizi indeksi iki ile sona varsa :

array(0 => 'field 1 val', 'field1_name'=> 'field 1 val',
      1 => 'field 2 val', 'field2_name'=> 'field 2 val', etc);

Belirtme ya MYSQL_ASSOC veya MYSQL_NUM sırasıyla sadece ilişkisel değerleri veya sayısal dizin değerlerini ya alır.

Değişim

while ($r = mysql_fetch_array($res)) {

karşı

while ($r = mysql_fetch_array($res, MYSQL_NUM)) {

veya

while ($r = mysql_fetch_array($res, MYSQL_ASSOC)) {

The default value fveya the 2nd argument karşı mysql_fetch_array() is MYSQL_BOTH which gives you back an array indexed numerically and associatively. Alternatively, you could use mysql_fetch_row() (returns a numerically indexed array) veya mysql_fetch_assoc() (returns an associative array) instead of mysql_fetch_array().

Kolay.

SQL sorgusu ise

SELECT foo FROM bar

sonra mysql_fetch_array 2 sonuç döndürür. Sayısal dizin ile bir, alan adı ile biridir. Davranışı görmek için koduna bir print_r ($ r) ekleyin.

Çözüm? Use mysql_fetch_assoc