Mysql запрос возвращает только первую букву строк - PullRequest
3 голосов
/ 10 января 2010

Может кто-нибудь сказать, что мне не хватает? следующий запрос sql возвращает только первую букву строк, которые он извлек из базы данных my:

 $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 ]

3 голосов
/ 10 января 2010

Если вы используете while() для выделения переменных в массиве, я не думаю, что вам нужно использовать $i, если вы измените код на:

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

Переменная $row['whatever'] должна быть добавлена ​​в массив. Это было опубликовано в качестве ответа, потому что это слишком долго, чтобы опубликовать в качестве комментария (по крайней мере разборчиво); Однако я не думаю, что это влияет на вашу проблему.

Однако стоит попробовать:

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

чтобы увидеть, каково содержимое переменных и возвращаются ли они из БД в виде односимвольных строк или происходит ли это где-то в коде.

1 голос
/ 10 января 2010

Я могу только предположить, что где-то в коде, предшествующем этому, вы установили $ln, $ln, $phone и $Email для некоторого строкового значения по умолчанию. Затем, поскольку вы не изменяете значение $ i с 0 в цикле, вы устанавливаете первую букву этих строк равной строковому значению, возвращенному из 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 голос
/ 10 января 2010

Или:

а. поля в вашей базе данных объявлены с длиной одного символа, так что данные на самом деле усекаются

б. вы получаете правильные данные, но что-то в коде, отображающем данные (которые вы не опубликовали), неверно, что приводит к этому результату

0 голосов
/ 22 августа 2012

У меня только что была эта проблема сегодня. (результаты показывают только первую букву каждой переменной).

Ситуация состояла в том, что мои данные формы ($_GET) использовали то же имя переменной, что и массив, который использовался позже после запроса.

Как только я изменил имя переменной данных формы, все было в порядке.

Итак, в качестве напоминания для ленивых людей, когда вы вставляете старый код на свою страницу, дважды проверяйте имена переменных! :)

0 голосов
/ 13 января 2010

однажды у меня была похожая проблема .... определение массивов перед присвоением им значений помогло мне

попробуй

$fn = array();

перед входом в цикл while

0 голосов
/ 10 января 2010

Вам нужно получить массив, который возвращается. Добавьте что-то вроде этого:

$row = mysql_fetch_array($result);
echo $row[0];
0 голосов
/ 10 января 2010

Возможно, ваш цикл foreach неверен. SQL выглядит хорошо. Может быть, вы делаете что-то не так позже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...