Как я могу получить результаты моей базы данных в массиве? - PullRequest
1 голос
/ 22 мая 2011

Я хочу создать этот массив с данными из моей базы данных.

| Day | Comment | OtherComment |
|-----|---------|--------------|
|  1  |  hallo  | hallohallo   |
|-----|---------|--------------|
|  2  |  hey    | heyhey       |
|-----|---------|--------------|
|  3  |  hello  | hellohello   |
|_____|_________|______________|

Я много чего пробовал, но мог получить желаемый результат, это мой последний код:

$sql = "select DiaryOpmerkingen, DiaryDoctorcomment from tblDiary 
                WHERE fk_UserId = ".$p_iUserid."
                AND DiaryDay = '".$this->Day."';";
        $rResult = mysqli_query($link, $sql);
        return $rResult;

        $dim = array();

        while ( $row = mysql_fetch_assoc($result) )
        $dim[$row['DiaryOpmerkingen']][$row['DiaryDoctorcomment']] = $row;

Ответы [ 4 ]

2 голосов
/ 22 мая 2011

Использование MySQLi

Хорошо, так как мы планируем сделать это с помощью MySQLi, я хотел бы познакомить вас с объектно-ориентированным способом использования mysqli, поэтому вам не нужно постоянно передавать ссылку на базу данных в ваших вызовах. Нам нужно изменить способ подключения:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

if ($mysqli->connect_error) {
    // So the user an error instead of exiting like this
    // in your production code!
    echo "Connect Error ({$mysqli->connect_errno}) {$mysqli->connect_error}";
    exit;
}

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

$sql = "SELECT DiaryOpmerkingen, DiaryDoctorcomment FROM tblDiary 
                WHERE fk_UserId = ?
                AND DiaryDay = ?";

$stmt = $mysqli->prepare($sql);
if(!$stmt) {
  // Let the user know the query failed!
}

Это немного незнакомо для тех из нас, кто привык к вашим стандартным запросам с включенными переменными:

$sql = "SELECT DiaryOpmerkingen, DiaryDoctorcomment FROM tblDiary 
                WHERE fk_UserId = ?
                AND DiaryDay = ?";

В основном, вопросительные знаки действуют как заполнители, которые мы будем заполнять фактическими значениями, которые мы хотим. Обратите внимание, что для строковых значений вам не нужно заключать в кавычки значение:

$sql = "SELECT DiaryOpmerkingen, DiaryDoctorcomment FROM tblDiary 
                WHERE fk_UserId = ?
                AND DiaryDay = '?'"; <-- This is wrong!!

Далее идет ядро ​​подготовленных высказываний:

$stmt->bind_param('is', $p_iUserid, $this->Day);

Здесь мы сообщаем MySQLi, на что мы хотим заменить заполнители вопросительного знака. Первый аргумент bind_param указывает тип данных, которые мы заменяем. Это позволяет MySQLi выполнять проверки работоспособности.

В этом случае i представляет целочисленное значение, а s представляет строковое значение. Затем мы перечисляем наши значения в порядке их появления в запросе. $p_iUserid заменяет первое ?, а $this->Day заменяет второе ?. Теперь мы выполним этот оператор, чтобы получить фактические данные:

$stmt->execute();

Следующая часть очень интересная особенность:

$stmt->bind_result($diaryOpmerkingen, $diaryDoctorcomment);

Поначалу это выглядит сложно, но на самом деле это очень упрощает работу с запросом. Эта функция создает переменные $diaryOpmerkingen и $diaryDoctorcommen заполняет их фактическими данными столбца, когда мы перебираем наши результаты:

$dim = array();
while ($stmt->fetch()) {
  $dim[$diaryOpmerkingen][$diaryDoctorcomment] = array($diaryOpmerkingen, $diaryDoctorcomment);
}

Обратите внимание, что нам не нужно использовать ассоциативные массивы, и вместо этого мы можем использовать более чистые имена переменных? Наконец, поскольку с подготовленными утверждениями вы можете менять местами разные значения, нам нужно освободить наше подготовленное утверждение, как только мы закончим с ним:

$stmt->close();

Наконец, мы закрываем наше основное соединение с базой данных:

$mysqli->close();

Вот полный список кодов для справки:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

if ($mysqli->connect_error) {
    // So the user an error instead of exiting like this
    // in your production code!
    echo "Connect Error ({$mysqli->connect_errno}) {$mysqli->connect_error}";
    exit;
}

$sql = "SELECT DiaryOpmerkingen, DiaryDoctorcomment FROM tblDiary 
                WHERE fk_UserId = ?
                AND DiaryDay = ?";

$stmt = $mysqli->prepare($sql);
if(!$stmt) {
  // Let the user know the query failed!
}

$stmt->bind_param('is', $p_iUserid, $this->Day);
$stmt->execute();
$stmt->bind_result($diaryOpmerkingen, $diaryDoctorcomment);

$dim = array();
while ($stmt->fetch()) {
  $dim[$diaryOpmerkingen][$diaryDoctorcomment] = array($diaryOpmerkingen, $diaryDoctorcomment);
}

$stmt->close();

$mysqli->close();

Использование стандартного MySQL

$sql = "select DiaryOpmerkingen, DiaryDoctorcomment from tblDiary 
                WHERE fk_UserId = ".$p_iUserid."
                AND DiaryDay = '".$this->Day."';";

Только выбирая нужные вам столбцы. Отлично. Однако, поскольку мы уже используем двойные кавычки, нам не нужен оператор конкатенации. Также неплохо последовательно выделять ключевые слова SQL из столбца и значений:

$sql = "SELECT DiaryOpmerkingen, DiaryDoctorcomment FROM tblDiary 
                WHERE fk_UserId = $p_iUserid
                AND DiaryDay = '{$this->Day}'";

Onward:

$rResult = mysqli_query($link, $sql);

Вы смешиваете параметры $link и $sql , а также смешиваете серии функций mysqli и mysql. Также, если у вас нет другого соединения где-то еще, вы можете просто использовать $sql в качестве единственного параметра:

$rResult = mysql_query($sql);

Теперь вы возвращаете результат:

    return $rResult;

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

    $dim = array();

    while ( $row = mysql_fetch_assoc($rResult) )
    {
      $dim[$row['DiaryOpmerkingen']][$row['DiaryDoctorcomment']] = $row;
    }

Вот окончательный код:

// Make sure $this->Day is sanitized if it's user input data
$day = mysql_real_escape_string($this->Day);
$sql = "SELECT DiaryOpmerkingen, DiaryDoctorcomment FROM tblDiary 
                WHERE fk_UserId = $p_iUserid
                AND DiaryDay = '$day'";

$rResult = mysql_query($sql);
if(!$rResult) {
  //Do something with the error
}

$dim = array();
while ( $row = mysql_fetch_assoc($rResult) )
{
  $dim[$row['DiaryOpmerkingen']][$row['DiaryDoctorcomment']] = $row;
}    
1 голос
/ 22 мая 2011

Проверьте эту страницу, для некоторых функций sql 5 полезных функций PHP для извлечения данных MySQL

0 голосов
/ 22 мая 2011
$i=0;
 while ( $row = mysql_fetch_assoc($result) )
  {
   extract($row);
$arr[$i]=$DiaryOpmerkingen;
$i++;

$arr[$i]=$DiaryDoctorcomment;

$i++;

}

Пожалуйста, попробуйте этот код

0 голосов
/ 22 мая 2011

Попробуйте:
while ($ r = mysql_fetch_assoc ($ result))

$ dim [$ r ['day']] = ["DiaryOpmerkingen" => $ r ['DiaryOpmerkingen']], 'DiaryDoctorcomment' => [$ r ['DiaryDoctorcomment']];

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