MySQL查询仅返回字符串的第一个字母

3

请问我错了什么,以下的SQL查询语句只返回从我的数据库中取出的字符串的第一个字母:

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

thanks.

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

...自从昨天以来一直困扰我的代码部分。 $fn$ln$email$phone都只包含一个字符。我认为错误在于我的页面,但我就是看不到它。与属性有关的任何内容都包含正确的值。


“users”表的结构是什么样子的?它的列中包含哪些数据类型?你又是如何确定它只显示了第一个字符的呢? - Eilon
我假设你在 SQL 查询的结尾有一个闭合的引号?你能展示一下用于获取行数据的代码吗? - Marek Karbarz
请发布您读取结果的代码。我猜错误就在那里。 - Mark Byers
$result = mysql_query("SELECT * FROM properties JOIN users USING(UserId) WHERE Level<>'Admin' $pages->limit") or die("无法加载所有属性"); $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和$phone都只包含一个字符。我认为错误在我的页面上,但我就是看不出来。任何与属性有关的内容都包含正确的值。谢谢。 - Selom
这很奇怪,我刚刚去掉了[$i],得到了$fn、$ln、$email和$phone这样的东西,然后我就得到了完整的信息。有人能解释一下我还缺少什么吗?非常感谢。 - Selom
在循环中你没有增加 $i 的值。 - Don
7个回答

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>";

为了查看变量的内容以及它们是否作为单个字符字符串从数据库返回,或者是否是在代码中发生的,请进行以下操作。


非常感谢,我去掉了[$i],现在它像魔法一样运行良好。谢谢。 - Selom

1

我只能假设在这段代码之前,您已经将$ln$ln$phone$Email设置为一些默认的字符串值。然后,因为您在循环中没有改变$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;
} 

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

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

例如:

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

在我看来,对象不应该有公共属性,但这只是为了举例。


1

可能是以下两种情况之一:

a. 数据库中的字段长度只有一个字符,导致数据被截断了。

b. 你获取到了正确的数据,但是显示数据的代码(你没有发布)存在问题,导致出现了这个结果。


0
我曾经遇到过类似的问题...在给数组赋值之前定义它们有帮助。
尝试一下。
$fn = array();

进入while循环之前


0

可能你的foreach循环有误。SQL语句看起来没问题。也许是后面做错了什么。


0
你需要获取返回的数组。 添加类似以下代码:
$row = mysql_fetch_array($result);
echo $row[0];

0

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

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

一旦我更改了表单数据的变量名,一切都正常了。

所以,提醒那些懒惰的人,当你将旧代码粘贴到页面上时,请仔细检查变量名!:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接