Mysql sorgu dizeleri yalnızca ilk harfini döndürür

6 Cevap php

Birisi eksik söyle lütfen. Aşağıdaki sql sorgu benim veritabanından getirilen dizeleri sadece ilk harfi döndürür:

 $result = mysql_query("SELECT * FROM users) or die("error in the query");

teşekkürler.

Update


$result = mysql_query("SELECT * 
                         FROM properties 
                         JOIN users USING(UserId) 
                        WHERE Level <> 'Admin' $pages->limit") or die("could not load all the properties"); 

$i=0; 
while($row = mysql_fetch_array($result)) { 
  $fn[$i] = $row ['FN']; 
  $ln[$i] = $row ['LN']; 
  $phone[$i] = $row ['Phone']; 
  $Email[$i] = $row ['Email']; 
} 

... Dünden beri bana baş ağrısı veren kod parçası. $fn, $ln, $email and $ telefon `hepsi tek bir karakter içermelidir. Ben hata kendi sayfama olduğunu düşünüyorum ama ben sadece onu göremiyorum. mülkiyet ile ilgili bir şey ayin değerini içerir

6 Cevap

Eğer bir dizi değişkenleri ayırmak için while() kullanıyorsanız eğer, ben size kodunu değiştirmek eğer, $i kullanmanız gerekir sanmıyorum:

while($row = mysql_fetch_array($result)) { 
  $fn[] = $row ['FN']; 
  $ln[] = $row ['LN']; 
  $phone[] = $row ['Phone']; 
  $Email[] = $row ['Email']; 
}

$row['whatever'] değişkeni dizi eklenmelidir. (En azından okunaklı) bir yorum olarak göndermek için çok uzun çünkü bu bir cevap olarak yayınlanmıştır; Ben, ancak, bu sorunu etkileyen sanmıyorum.

Bu olsa da, denemeye değer:

`echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";

değişkenlerin içeriği ne görmek ve onlar bir karakter dizeleri olarak db iade edilen konum, ya da bir yere kodu oluyor ise olmadığı.

Ya:

a. veri aslında kesildi ediliyor böylece veritabanındaki alanlar, bir karakter uzunluğu ile bildirilir

b. Eğer doğru veri alıyoruz ama (göndermeyen) verilerini görüntüleyen kod şey bu sonuca yol açan, yanlış

Ben sadece $ln kurdunuz bu önceki kodunda bir yerlerde, $ln tahmin edebilirsiniz, $phone ve $Email bazı varsayılan dize değeri. Sonra, döngü size dize değerine eşit olması, bu dizelerin ilk harfini ayarlarken 0'dan $ i değerini değiştirerek değil, çünkü mysql_fetch_array() olan sadece değişen etkiye sahiptir döndü ilk mektup. Açıklamak zor bu yüzden bana bir örnek sağlamaktayız:

$tmp = 'A';
$tmp[0] = 'It does not matter how long this string is!';
echo $tmp;

Bu pasajı sonucu tek karakter "Ben" yankılandı gets olduğunu.

: Sizin kod olarak çalışacak

$fn = $ln = $phone = $Email = array();
$i=0; 
while($row = mysql_fetch_array($result)) { 
    $fn[$i] = $row ['FN']; 
    $ln[$i] = $row ['LN']; 
    $phone[$i] = $row ['Phone']; 
    $Email[$i] = $row ['Email']; 
    ++$i;
} 

Dizeleri olarak değişkenleri set nerede Alternatif bulabilirsiniz.

Böyle bölme kadar ilgili bilgiler nadiren yararlıdır, çünkü "kullanıcı" nesneleri dizisi olan düşünün.

örneğin

class User {
    public $first_name = '';
    public $last_name = '';
    public $phone_number = '';
    public $email = '';

    public function __construct($first, $last, $phone, $email) {
       $this->first_name = $first;
       $this->last_name = $last;
       $this->phone_number = $phone;
       $this->email = $email;
    }

    public function full_name() {
       return $first_name . ' ' . $last_name;
    }
}

while ($row = mysql_fetch_array($result)) { 
    $users[] = new User($row['FN'], $row['LN'], $row['Phone'], $row['Email']);
}

Nesneler, IMHO, kamu özelliklere sahip olmamalı ama bu örnek amaçlıdır.

Belki foreach döngü yanlıştır. SQL iyi görünüyor. Belki daha sonra yanlış bir şey yapıyorsun

i bana yardımcı onlara değer atamadan önce Dizi tanımlarken .... bir kez bu benzer bir sorun vardı

denemek

$fn = array();

while döngüsüne girmeden önce

Ben sadece bugün bu sorunu vardı. (Sonuçlar sadece her değişkenin ilk harfini gösteren).

Durum benim form verileri ($_GET) sorgudan sonra daha sonra kullanılan dizi olarak aynı değişken adını kullanarak olmasıydı.

Ben form verileri değişken adını değiştirdi sonra, her şey iyiydi.

Yani, tembel insanlar, sizin sayfanızın içine eski kodu yapıştırın, çift kontrol değişken isimleri için bir hatırlatma olarak! :)