开发者

How do I get my database results in an array?

开发者 https://www.devze.com 2023-03-07 09:50 出处:网络
I want to create this array with data from my database.. Day | Comment | OtherComment | |-----|---------|--------------|

I want to create this array with data from my database..

| Day | Comment | OtherComment |
|-----|---------|--------------|
|  1  |  hallo  | hallohallo   |
|-----|---------|--开发者_开发技巧------------|
|  2  |  hey    | heyhey       |
|-----|---------|--------------|
|  3  |  hello  | hellohello   |
|_____|_________|______________|

I tried a lot of things, but could get the result I wanted, this is my latest code:

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


Using MySQLi

Okay since we plan to do this using MySQLi, I'd like to introduce you to the object oriented way of using mysqli, so you don't have to keep passing the database link around in your calls. We'll need to make a change to how we connect:

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

As noted in the comment inline, instead of exiting and showing the user a very ugly looking single line error, you should instead show them a more friendly error page. Next we're going to use something called a prepared statement to make sure our data is sanitized:

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

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

This is a bit unfamiliar looking for those of us used to your standard queries with variables inlined:

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

Basically the question marks act as placeholders that we will fill with the actual values we want. Please note that for string values, you don't need to put quotes around the value:

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

Next is the core of prepared statements:

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

Here, we are telling MySQLi what we want to replace the question mark placeholders with. The first argument to bind_param indicates the type of data we're replacing. This allows MySQLi to perform sanity checks.

In this case i represents an integer value, and s represents a string value. Then we list our values in the order they appear in the query. $p_iUserid replaces the first ? and $this->Day replaces the second ?. Now we execute this statement so we can get the actual data:

$stmt->execute();

The next part is a very interesting feature:

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

This looks complicated at first, but its actually makes things very easier when working with the query. What this function does is create the variables $diaryOpmerkingen and $diaryDoctorcommen fills them with the actual column data when we loop through our results:

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

Notice how we don't have to use associative arrays and can instead utilize cleaner variable names? Finally, since with prepared statements, you can keep swapping in different values, we need to free our prepared statement once we're done with it:

$stmt->close();

Finally, we close our main database connection:

$mysqli->close();

Here is the full code listing for reference:

$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();

Using Standard MySQL

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

Only selecting columns you need. Very good. However since we're already using double quotes, we don't need the concatenation operator. Also it's a good idea to break out SQL keywords from column and values consistently:

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

Onward:

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

You're mixing up the $link and $sql parameters, and also mixing mysqli and mysql series of functions up. Also unless you have another connection somewhere else, you can just use $sql as the sole parameter:

$rResult = mysql_query($sql);

Now you're returning the result:

    return $rResult;

but by doing the the next pieces of code don't get called, so we can get rid of that. Finally we loop through the results:

    $dim = array();

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

Here's the final code:

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


Check out this page, for some sql functions 5 useful PHP functions for MySQL data fetching


Try:
while ( $r = mysql_fetch_assoc($result) )

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


$i=0;
 while ( $row = mysql_fetch_assoc($result) )
  {
   extract($row);
$arr[$i]=$DiaryOpmerkingen;
$i++;

$arr[$i]=$DiaryDoctorcomment;

$i++;

}

Please try this code

0

精彩评论

暂无评论...
验证码 换一张
取 消