|  | <?php | 
|  |  | 
|  | /** | 
|  | * ***************************************************************************** | 
|  | * Copyright (c) 2017 Eclipse Foundation and others. | 
|  | * All rights reserved. This program and the accompanying materials | 
|  | * are made available under the terms of the Eclipse Public License v1.0 | 
|  | * which accompanies this distribution, and is available at | 
|  | * http://www.eclipse.org/legal/epl-v10.html | 
|  | * ***************************************************************************** | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * This function provides a means of more-or-less completely abstracting the | 
|  | * database when executing a query (callers are still required to provide SQL | 
|  | * syntax in a form that the database provider understands). | 
|  | * | 
|  | * This function will execute the provided SQL as a query and then evaluate | 
|  | * the provided function with each of the rows that are returned from that | 
|  | * query. Rows are provided as an associative array with the column name as the | 
|  | * key. | 
|  | * | 
|  | * An array of substitutions can be provided. All values are escaped using | 
|  | * the database before they are substituted. | 
|  | * | 
|  | * All resources that are allocated by the function are closed before the | 
|  | * function exits. | 
|  | * | 
|  | * @param string $database | 
|  | *        The name of the database. | 
|  | * @param string $sql | 
|  | *        The query. | 
|  | * @param mixed $variables | 
|  | *        An associative array of variable substitutions. | 
|  | * @param callable $each | 
|  | *        A function that takes a single row as its only parameter. | 
|  | * @return void | 
|  | */ | 
|  | function query($database, $sql, $variables, $each) { | 
|  | global $App; | 
|  | if (function_exists('mysql_connect')) { | 
|  | $substitutions = array(); | 
|  | if ($variables) { | 
|  | // Database connections are created lazily, so it's | 
|  | // possible that we may not have an actual database | 
|  | // connection when we try to call mysql_real_escape_string. | 
|  | // Call App::database to ensure that a connection exists. | 
|  | $App->database($database,''); | 
|  | foreach ($variables as $key => $value) { | 
|  | $substitutions[$key] = mysql_real_escape_string($value); | 
|  | } | 
|  | } | 
|  |  | 
|  | if ($result = $App->sql(strtr($sql, $substitutions), $database)) { | 
|  | while ($row = mysql_fetch_assoc($result)) { | 
|  | $each($row); | 
|  | } | 
|  | } | 
|  | return; | 
|  | } | 
|  |  | 
|  | // TODO this will only work in the development environment. | 
|  | $mysqli = new mysqli('localhost', 'dashboard', 'draobhsad', "{$database}_demo"); | 
|  | if ($mysqli->connect_errno) { | 
|  | printf("Connect failed: %s\n", $mysqli->connect_error); | 
|  | exit(); | 
|  | } | 
|  |  | 
|  | mysqli_set_charset ($mysqli , "utf8"); | 
|  |  | 
|  | $substitutions = array(); | 
|  | if ($variables) { | 
|  | foreach ($variables as $key => $value) { | 
|  | $substitutions[$key] = $mysqli->escape_string($value); | 
|  | } | 
|  | } | 
|  |  | 
|  | $statement = strtr($sql, $substitutions); | 
|  | if ($result = $mysqli->query($statement)) { | 
|  | while ($row = $result->fetch_assoc()) { | 
|  | $each($row); | 
|  | } | 
|  | $result->free(); | 
|  | } | 
|  | else { | 
|  | printf("Query failed: %s\n", $mysqli->error); | 
|  | } | 
|  |  | 
|  | $mysqli->close(); | 
|  | } | 
|  | ?> |