|  | <?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 | 
|  | * ***************************************************************************** | 
|  | */ | 
|  |  | 
|  | require_once $_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"; | 
|  |  | 
|  | /** | 
|  | * 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. | 
|  | * | 
|  | * Note: For local development, see comments in App::_constructor() for | 
|  | * instructions on how to override databases and other settings. | 
|  | * | 
|  | * @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; | 
|  | $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] = $App->sqlSanitize($value); | 
|  | } | 
|  | } | 
|  |  | 
|  | if ($result = $App->sql(strtr($sql, $substitutions), $database)) { | 
|  | while ($row = mysqli_fetch_assoc($result)) { | 
|  | $each($row); | 
|  | } | 
|  | } | 
|  | return; | 
|  | } |