Mysql查询只返回字符串的第一个字母

时间:2010-01-10 00:00:19

标签: php sql mysql

有人可以告诉我我错过了什么。以下sql查询仅返回从我的数据库中获取的字符串的第一个字母:

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

感谢。

更新


$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']; 
} 

...从昨天起让我头痛的代码部分。 $fn$ln$email and $ phone`全部只包含一个字符。我认为错误在我自己的页面上,但我只是看不到它。有关财产的任何内容都包含仪式值

7 个答案:

答案 0 :(得分:3)

如果您使用while()将变量分配给数组,我认为您不需要使用$i,如果您将代码更改为:

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

$row['whatever']变量应附加到数组中。这是作为答案发布的,因为它作为评论发布太长了(至少清晰可见);但是,我不认为这会影响你的问题。

但是,值得尝试:

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

查看变量的内容是什么,以及它们是否作为单字符字符串从db返回,或者是否在代码中的某处发生。

答案 1 :(得分:1)

或者:

一个。数据库中的字段以一个字符的长度声明,因此数据实际上被截断

湾你得到了正确的数据,但显示数据的代码(你还没有发布)是错误的,导致这个结果

答案 2 :(得分:1)

我只能假设您之前的代码中某处已将$ln$ln$phone$Email设置为某个默认字符串值。然后,因为你没有在循环中从0更改$ i的值,所以你将这些字符串的第一个字母设置为等于从mysql_fetch_array()返回的字符串值,这只会改变第一个字符串信件。很难解释所以请允许我提供一个例子:

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

该片段的结果是单个字符“I”被回显。

您的代码将起作用:

$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;
} 

或者找到将变量设置为字符串的位置。

考虑使用一组“用户”对象,因为拆分这样的相关信息很少有用。

e.g。

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']);
}

对象,恕我直言,不应该有公共属性,但这是出于示例目的。

答案 3 :(得分:0)

也许你的foreach循环不正确。 SQL看起来不错。也许你以后做错了什么

答案 4 :(得分:0)

您需要获取返回的数组。 添加如下内容:

$row = mysql_fetch_array($result);
echo $row[0];

答案 5 :(得分:0)

我有一次类似的问题....在为它们赋值之前定义数组帮助我

尝试

$fn = array();

进入while循环之前

答案 6 :(得分:0)

我今天刚遇到这个问题。 (结果只显示每个变量的第一个字母)。

情况是我的表单数据($_GET)使用的变量名与稍后在查询后使用的数组相同。

一旦我更改了表单数据变量名称,一切都很好。

因此,作为对懒人的提醒,当您将旧代码粘贴到页面中时,请仔细检查变量名称! :)