Menu
Free Trials
Table of contents

Connecting to relational database with PHP

Requirements

  • Flexmonster Pivot Component v2.213 PROFESSIONAL edition or higher
  • PHP 5.3+ (earlier versions may work, but not tested)

Supported databases

Step 1: Embed the component into your web page

Embedding Flexmonster Pivot is a simple copy-paste procedure that takes just minutes!

  1. Copy contents of flexmonster/ folder into the web project root to your server.
  2. Copy the code below and paste it into your HTML page.
<div id="pivotContainer">The component will appear here</div>
<script src="flexmonster/lib/jquery.min.js"></script>
<script src="flexmonster/flexmonster.js"></script>

<script>
	var pivot = $("#pivotContainer").flexmonster({
		toolbar: true,
		licenseKey: "XXXX-XXXX-XXXX-XXXX-XXXX"
	});
</script>

Run your web page and see the empty table. The next step is to see your own data on the grid.

Step 2: Setup Data Compressor on the server

First of all, you need to add the following dependency to your project, flexmonster-compressor.php is located in the Download Package:

require_once("flexmonster-compressor.php");

Below is the connection and query sample for MySQL database:

mysql_connect($server, $username, $password);
mysql_select_db($dbname);
$result = mysql_query("SELECT * FROM customer");

The following line of code will start streaming compressed $result:

header('Content-Type: text/plain');
Compressor::compressMySql($result);

Full project is available at the server/php/ inside Download Package.

Step 3: Enable cross-origin resource sharing (CORS).

By default, browser prevents JavaScript from making requests across domain boundaries. CORS allows web applications to make cross-domain requests. Here are some useful links explain how to setup CORS on your server:

Also, you can add the following headers at the beginning of PHP file:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods', 'OPTIONS,GET,PUT,POST,DELETE');
header('Access-Control-Allow-Headers', 'Content-Type');

Step 4: Configure report with your own data

Now it’s time to configure Flexmonster Pivot Component on the web page. Let’s create a minimal report for this (replace filename and other parameters with your specific values):

var pivot = $("#pivotContainer").flexmonster({
	toolbar: true,
	report: {
		dataSource: {
			dataSourceType: "ocsv",
			/* URL to the Data Compressor PHP */
			filename: "http://localhost/demo-compress-mysql.php"
		}
	},
	licenseKey: "XXXX-XXXX-XXXX-XXXX-XXXX"
});

Launch the web page from browser — here you go! Pivot table is embedded into your project.

Examples

Here you can find few PHP examples of compressing different databases.

MySQL

header("Content-Type: text/plain");
require_once("flexmonster-compressor.php");

mysql_connect("localhost", "username", "password");
mysql_select_db("foodmart");
$result = mysql_query("SELECT * FROM customer");
Compressor::compressMySql($result);

MySQLi

header("Content-Type: text/plain");
require_once("flexmonster-compressor.php");

$mysqli = new mysqli("localhost", "username", "password", "foodmart");
$result = $mysqli->query("SELECT * FROM customer");
Compressor::compressMySqli($result);

Microsoft SQL Server

header("Content-Type: text/plain");
require_once("flexmonster-compressor.php");

$conn = sqlsrv_connect("localhost", array( 
    "Database"=>"foodmart",
    "UID"=>"username",
    "PWD"=>"password"
  )
);
$result = sqlsrv_query($conn, "SELECT * FROM customer");
Compressor::compressSQLSRV($result);

PostgreSQL

header("Content-Type: text/plain");
require_once("flexmonster-compressor.php");

$conn = pg_connect("host=localhost dbname=foodmart user=username password=password");
$result = pg_query($conn, "SELECT * FROM customer");
Compressor::compressPostgreSQL($result);

Oracle Database

header("Content-Type: text/plain"); 
require_once("flexmonster-compressor.php");

$conn = oci_connect("username", "password", "localhost/XE");
$stid = oci_parse($conn, 'SELECT * FROM customer');
oci_execute($stid);
Compressor::compressOCI($stid);

PDO / MySQL example

header("Content-Type: text/plain");
require_once("flexmonster-compressor.php");

$conn = new PDO("mysql:host=localhost;dbname=foodmart", "username", "password");
$result = $conn->query("SELECT * from customer");
Compressor::compressPDO($result);

Other Databases / MySQL example

header("Content-Type: text/plain");
require_once("flexmonster-compressor.php");

mysql_connect("localhost", "username", "password");
mysql_select_db("foodmart");
$result = mysql_query("SELECT * FROM customer");

$header = array();
for ($i=0; $i < mysql_num_fields($result); $i++) { 
  $header[$i] = array(
    'name' => mysql_field_name($result, $i), 
    'type' => mysql_field_type($result, $i)
  );
}
$array = array();
$array[] = $header;
while ($row = mysql_fetch_row($result)) {
  $array[] = $row;
}
Compressor::compressArray($array);

Saving to file / MySQL example

header("Content-Type: text/plain");
require_once("flexmonster-compressor.php");

mysql_connect("localhost", "username", "password");
mysql_select_db("foodmart");
mysql_set_charset("utf8"); $result = mysql_query("SELECT * FROM customer"); $outFile = "data.ocsv"; Compressor::compressMySql($result, $outFile);

Troubleshooting

Data is not streaming

It is likely that output_buffering is enabled in the PHP configuration on your server and therefore data is not streaming. Please try to disable it in the php.ini for better performance:
output_buffering = Off (see http://php.net/manual/en/outcontrol.configuration.php).