function dump_properties($mysqli)
{
    printf("\nClass variables:\n");
    $variables = array_keys(get_class_vars(get_class($mysqli)));
    sort($variables);
    foreach ($variables as $k => $var) {
        printf("%s = '%s'\n", $var, var_export(@$mysqli->{$var}, true));
    }
    printf("\nObject variables:\n");
    $variables = array_keys(get_object_vars($mysqli));
    foreach ($variables as $k => $var) {
        printf("%s = '%s'\n", $var, var_export(@$mysqli->{$var}, true));
    }
    printf("\nMagic, magic properties:\n");
    assert(@mysqli_affected_rows($mysqli) === @$mysqli->affected_rows);
    printf("mysqli->affected_rows = '%s'/%s ('%s'/%s)\n", @$mysqli->affected_rows, gettype(@$mysqli->affected_rows), @mysqli_affected_rows($mysqli), gettype(@mysqli_affected_rows($mysqli)));
    assert(@mysqli_get_client_info() === @$mysqli->client_info);
    printf("mysqli->client_info = '%s'/%s ('%s'/%s)\n", @$mysqli->client_info, gettype(@$mysqli->client_info), @mysqli_get_client_info(), gettype(@mysqli_get_client_info()));
    assert(@mysqli_get_client_version() === @$mysqli->client_version);
    printf("mysqli->client_version =  '%s'/%s ('%s'/%s)\n", @$mysqli->client_version, gettype(@$mysqli->client_version), @mysqli_get_client_version(), gettype(@mysqli_get_client_version()));
    assert(@mysqli_errno($mysqli) === @$mysqli->errno);
    printf("mysqli->errno = '%s'/%s ('%s'/%s)\n", @$mysqli->errno, gettype(@$mysqli->errno), @mysqli_errno($mysqli), gettype(@mysqli_errno($mysqli)));
    assert(@mysqli_error($mysqli) === @$mysqli->error);
    printf("mysqli->error = '%s'/%s ('%s'/%s)\n", @$mysqli->error, gettype(@$mysqli->error), @mysqli_error($mysqli), gettype(@mysqli_error($mysqli)));
    assert(@mysqli_field_count($mysqli) === @$mysqli->field_count);
    printf("mysqli->field_count = '%s'/%s ('%s'/%s)\n", @$mysqli->field_count, gettype(@$mysqli->field_count), @mysqli_field_count($mysqli), gettype(@mysqli_field_count($mysqli)));
    assert(@mysqli_insert_id($mysqli) === @$mysqli->insert_id);
    printf("mysqli->insert_id = '%s'/%s ('%s'/%s)\n", @$mysqli->insert_id, gettype(@$mysqli->insert_id), @mysqli_insert_id($mysqli), gettype(@mysqli_insert_id($mysqli)));
    assert(@mysqli_sqlstate($mysqli) === @$mysqli->sqlstate);
    printf("mysqli->sqlstate = '%s'/%s ('%s'/%s)\n", @$mysqli->sqlstate, gettype(@$mysqli->sqlstate), @mysqli_sqlstate($mysqli), gettype(@mysqli_sqlstate($mysqli)));
    assert(@mysqli_get_host_info($mysqli) === @$mysqli->host_info);
    printf("mysqli->host_info = '%s'/%s ('%s'/%s)\n", @$mysqli->host_info, gettype(@$mysqli->host_info), @mysqli_get_host_info($mysqli), gettype(@mysqli_get_host_info($mysqli)));
    /* note that the data types are different */
    assert(@mysqli_info($mysqli) == @$mysqli->info);
    printf("mysqli->info = '%s'/%s ('%s'/%s)\n", @$mysqli->info, gettype(@$mysqli->info), @mysqli_info($mysqli), gettype(@mysqli_info($mysqli)));
    assert(@mysqli_thread_id($mysqli) > @$mysqli->thread_id);
    assert(gettype(@$mysqli->thread_id) == gettype(@mysqli_thread_id($mysqli)));
    printf("mysqli->thread_id = '%s'/%s ('%s'/%s)\n", @$mysqli->thread_id, gettype(@$mysqli->thread_id), @mysqli_thread_id($mysqli), gettype(@mysqli_thread_id($mysqli)));
    assert(@mysqli_get_proto_info($mysqli) === @$mysqli->protocol_version);
    printf("mysqli->protocol_version = '%s'/%s ('%s'/%s)\n", @$mysqli->protocol_version, gettype(@$mysqli->protocol_version), @mysqli_get_proto_info($mysqli), gettype(@mysqli_get_proto_info($mysqli)));
    assert(@mysqli_get_server_info($mysqli) === @$mysqli->server_info);
    printf("mysqli->server_info = '%s'/%s ('%s'/%s)\n", @$mysqli->server_info, gettype(@$mysqli->server_info), @mysqli_get_server_info($mysqli), gettype(@mysqli_get_server_info($mysqli)));
    assert(@mysqli_get_server_version($mysqli) === @$mysqli->server_version);
    printf("mysqli->server_version = '%s'/%s ('%s'/%s)\n", @$mysqli->server_version, gettype(@$mysqli->server_version), @mysqli_get_server_version($mysqli), gettype(@mysqli_get_server_version($mysqli)));
    assert(@mysqli_warning_count($mysqli) === @$mysqli->warning_count);
    printf("mysqli->warning_count = '%s'/%s ('%s'/%s)\n", @$mysqli->warning_count, gettype(@$mysqli->warning_count), @mysqli_warning_count($mysqli), gettype(@mysqli_warning_count($mysqli)));
    printf("\nAccess to undefined properties:\n");
    printf("mysqli->unknown = '%s'\n", @$mysqli->unknown);
    @($mysqli->unknown = 13);
    printf("setting mysqli->unknown, @mysqli_unknown = '%s'\n", @$mysqli->unknown);
    $unknown = 'friday';
    @($mysqli->unknown = $unknown);
    printf("setting mysqli->unknown, @mysqli_unknown = '%s'\n", @$mysqli->unknown);
    printf("\nAccess hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):\n");
    assert(@mysqli_connect_error() === @$mysqli->connect_error);
    printf("mysqli->connect_error = '%s'/%s ('%s'/%s)\n", @$mysqli->connect_error, gettype(@$mysqli->connect_error), @mysqli_connect_error(), gettype(@mysqli_connect_error()));
    assert(@mysqli_connect_errno() === @$mysqli->connect_errno);
    printf("mysqli->connect_errno = '%s'/%s ('%s'/%s)\n", @$mysqli->connect_errno, gettype(@$mysqli->connect_errno), @mysqli_connect_errno(), gettype(@mysqli_connect_errno()));
}
Esempio n. 2
0
 /**
  * Executes the query that was previously passed to the constructor.
  *
  * @param mixed  $arg      Query arguments to escape and insert at ? placeholders in $query
  * @param mixed  ...       Additional arguments
  **/
 function execute()
 {
     // Load the function arguments, minus the query itself, which we already extracted
     $args = func_get_args();
     // Split out sub-arrays, etc..
     $args = Database::smart_args($args);
     // Were enough arguments passed in?
     if (count($args) != $this->num_args_needed) {
         trigger_error('Database_Query_mysqlicompat called with ' . count($args) . " arguments, but requires {$this->num_args_needed}.", E_USER_ERROR);
     }
     // Finish any previous statements
     $this->finish();
     // Replace in the arguments
     $this->last_query = '';
     foreach ($this->query as $part) {
         $this->last_query .= $part;
         if (count($args)) {
             $arg = array_shift($args);
             $this->last_query .= is_null($arg) ? 'NULL' : "'" . mysqli_real_escape_string($this->dbh, $arg) . "'";
         }
     }
     // Perform the query
     // If we don't have a valid connection, fataly error out.
     if ($this->dbh === false) {
         $this->db->error();
         trigger_error($this->db->error, E_USER_ERROR);
     }
     $this->sh = mysqli_query($this->dbh, $this->last_query);
     // Cache  these so the warning count below doesn't interfere
     if (is_bool($this->sh)) {
         $this->insert_id = mysqli_insert_id($this->dbh);
         $this->affected_rows = mysqli_affected_rows($this->dbh);
     } else {
         $this->num_rows = mysqli_num_rows($this->sh);
     }
     // On each execute, we clear the warnings of the statement handle, so it doesn't
     // store them up
     $this->warnings = array();
     // Check the warnings and store them
     if (mysqli_warning_count($this->dbh)) {
         if ($sh = mysqli_query($this->dbh, 'SHOW WARNINGS')) {
             while ($row = mysqli_fetch_row($sh)) {
                 $this->warnings[] = array('#' => $row[1], 'MSG' => $row[2]);
             }
             mysqli_free_result($sh);
             // This is used in errors.php to output in the backtrace
             global $_DEBUG;
             $_DEBUG['Database Warnings'][] = array('Query' => $this->last_query, 'Warnings' => $this->warnings);
         }
     }
     if ($this->sh === false) {
         if ($this->db->fatal_errors) {
             trigger_error('SQL Error: ' . mysqli_error($this->dbh) . ' [#' . mysqli_errno($this->dbh) . ']', E_USER_ERROR);
         } else {
             $this->db->error();
         }
     }
 }
Esempio n. 3
0
 /**
  * Executes the query that was previously passed to the constructor.
  *
  * @param mixed  $arg      Query arguments to escape and insert at ? placeholders in $query
  * @param mixed  ...       Additional arguments
  **/
 public function execute()
 {
     // We can't very well perform a query wtihout an active connection.
     if (!(is_object($this->dbh) && $this->dbh instanceof mysqli)) {
         $this->db->error('Lost connection to database.');
         return;
     }
     // Finish any previous statements
     $this->finish();
     // Replace in the arguments.  Yes, we're doing it manually.  While MySQLi
     // has prepared statements, the binding method requires that we know the
     // type of value being passed.  We can't guess it with certainty.
     $this->last_query = $this->replaceholders(Database::smart_args(func_get_args()));
     if (!$this->last_query) {
         return;
     }
     // Wrap the actual query execution in a bit of benchmarking.
     $before = microtime(true);
     $this->sh = mysqli_query($this->dbh, $this->last_query);
     $after = microtime(true);
     $this->db->mysql_time += $after - $before;
     // Non-select statements return a boolean, which means we call affected_rows.
     if (is_bool($this->sh)) {
         $this->insert_id = mysqli_insert_id($this->dbh);
         $this->affected_rows = mysqli_affected_rows($this->dbh);
     } else {
         $this->num_rows = mysqli_num_rows($this->sh);
     }
     // Can we pull down warnings from the server?
     $this->warnings = array();
     if ($this->db->enable_warning_logging && mysqli_warning_count($this->dbh)) {
         if ($sh = mysqli_query($this->dbh, 'SHOW WARNINGS')) {
             while ($row = mysqli_fetch_row($sh)) {
                 $this->warnings[] = array('#' => $row[1], 'MSG' => $row[2]);
             }
             mysqli_free_result($sh);
             // Push it upstream.
             $GLOBALS['_DEBUG']['Database Warnings'][] = array('Query' => $this->last_query, 'Warnings' => $this->warnings);
         }
     }
     // Did it even work?
     if ($this->sh === false) {
         $this->db->error('SQL Error:');
         return false;
     }
     return true;
 }
Esempio n. 4
0
/**
 * runs a query and returns the result
 *
 * @uses    PMA_DBI_QUERY_STORE
 * @uses    PMA_DBI_QUERY_UNBUFFERED
 * @uses    PMA_MYSQL_INT_VERSION
 * @uses    $GLOBALS['userlink']
 * @uses    PMA_convert_charset()
 * @uses    MYSQLI_STORE_RESULT
 * @uses    MYSQLI_USE_RESULT
 * @uses    mysqli_query()
 * @uses    defined()
 * @param   string          $query      query to execute
 * @param   object mysqli   $link       mysqli object
 * @param   integer         $options
 * @return  mixed           true, false or result object
 */
function PMA_DBI_try_query($query, $link = null, $options = 0)
{
    if ($options == ($options | PMA_DBI_QUERY_STORE)) {
        $method = MYSQLI_STORE_RESULT;
    } elseif ($options == ($options | PMA_DBI_QUERY_UNBUFFERED)) {
        $method = MYSQLI_USE_RESULT;
    } else {
        $method = 0;
    }
    if (empty($link)) {
        if (isset($GLOBALS['userlink'])) {
            $link = $GLOBALS['userlink'];
        } else {
            return false;
        }
    }
    if (defined('PMA_MYSQL_INT_VERSION') && PMA_MYSQL_INT_VERSION < 40100) {
        $query = PMA_convert_charset($query);
    }
    $result = mysqli_query($link, $query, $method);
    if (mysqli_warning_count($link)) {
        /**
         * @todo check $method ?
         */
        $warning_result = mysqli_query($link, 'SHOW WARNINGS');
        if ($warning_result) {
            $warning_row = mysqli_fetch_row($warning_result);
            $GLOBALS['warning'] = sprintf("%s (%d): %s", $warning_row[0], $warning_row[1], $warning_row[2]);
        }
    } else {
        unset($GLOBALS['warning']);
    }
    return $result;
    // From the PHP manual:
    // "note: returns true on success or false on failure. For SELECT,
    // SHOW, DESCRIBE or EXPLAIN, mysqli_query() will return a result object"
    // so, do not use the return value to feed mysqli_num_rows() if it's
    // a boolean
}
Esempio n. 5
0
 public function simpleQuery($query, $debug = false)
 {
     global $lC_MessageStack, $lC_Services;
     if ($this->isConnected()) {
         $this->number_of_queries++;
         if ($debug === false && $this->debug === true) {
             $debug = true;
         }
         if (isset($lC_Services) && $lC_Services->isStarted('debug')) {
             if ($debug === false && SERVICE_DEBUG_OUTPUT_DB_QUERIES == '1') {
                 $debug = true;
             }
             if (!lc_empty(SERVICE_DEBUG_EXECUTION_TIME_LOG) && SERVICE_DEBUG_LOG_DB_QUERIES == '1') {
                 @error_log('QUERY ' . $query . "\n", 3, SERVICE_DEBUG_EXECUTION_TIME_LOG);
             }
         } elseif ($debug === true) {
             $debug = false;
         }
         if ($debug === true) {
             $time_start = $this->getMicroTime();
         }
         $resource = @mysqli_query($this->link, $query);
         if ($debug === true) {
             $time_end = $this->getMicroTime();
             $query_time = number_format($time_end - $time_start, 5);
             if ($this->debug === true) {
                 $this->time_of_queries += $query_time;
             }
             echo '<div style="font-family: Verdana, Arial, sans-serif; font-size: 7px; font-weight: bold;">[<a href="#query' . $this->number_of_queries . '">#' . $this->number_of_queries . '</a>]</div>';
             $lC_MessageStack->add('debug', '<a name=\'query' . $this->number_of_queries . '\'></a>[#' . $this->number_of_queries . ' - ' . $query_time . 's] ' . $query, 'warning');
         }
         if ($resource !== false) {
             $this->error = false;
             $this->error_number = null;
             $this->error_query = null;
             if (mysqli_warning_count($this->link) > 0) {
                 $warning_query = @mysqli_query($this->link, 'show warnings');
                 while ($warning = @mysqli_fetch_row($warning_query)) {
                     @trigger_error(sprintf('[MYSQL] %s (%d): %s [QUERY] ' . $query, $warning[0], $warning[1], $warning[2]), E_USER_WARNING);
                 }
                 mysqli_free_result($warning_query);
             }
             return $resource;
         } else {
             $this->setError(mysqli_error($this->link), mysqli_errno($this->link), $query);
             return false;
         }
     } else {
         return false;
     }
 }
Esempio n. 6
0
 /**
  * This function determines whether the last query caused warning messages
  * and stores them in $this->Queries.
  */
 function warnings()
 {
     $Warnings = array();
     if (mysqli_warning_count($this->LinkID)) {
         $e = mysqli_get_warnings($this->LinkID);
         do {
             if ($e->errno == 1592) {
                 // 1592: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.
                 continue;
             }
             $Warnings[] = 'Code ' . $e->errno . ': ' . display_str($e->message);
         } while ($e->next());
     }
     $this->Queries[count($this->Queries) - 1][2] = $Warnings;
 }
<?php

require_once "connect.inc";
/*** test mysqli_connect 127.0.0.1 ***/
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
mysqli_select_db($link, $db);
mysqli_query($link, "DROP TABLE IF EXISTS test_warnings");
mysqli_query($link, "DROP TABLE IF EXISTS test_warnings");
var_dump(mysqli_warning_count($link));
mysqli_close($link);
print "done!";
Esempio n. 8
0
 public function getWarning()
 {
     $war = "";
     if (mysqli_warning_count(self::$connection[self::$active])) {
         $e = mysqli_get_warnings(self::$connection[self::$active]);
         $war .= "<b>Aviso:</b>";
         do {
             $war .= " {$e->errno} - {$e->message}\n<br>";
         } while ($e->next());
     }
     return $war;
 }
Esempio n. 9
0
                         SendPacket($Packet);
                         while ($Row = mysqli_fetch_array($result, MYSQL_NUM)) {
                             $Packet = '';
                             $Lengths = mysqli_fetch_lengths($result);
                             for ($i = 0; $i < mysqli_num_fields($result); $i++) {
                                 if (!isset($Row[$i])) {
                                     $Packet .= "û";
                                 } else {
                                     $Packet .= PackLength($Lengths[$i]) . $Row[$i];
                                 }
                             }
                             SendPacket($Packet);
                         }
                         $Packet = '';
                         $Packet .= "þ";
                         $Packet .= pack('v', mysqli_warning_count($mysqli));
                         if ($MorePackets || mysqli_more_results($mysqli)) {
                             $Packet .= pack('v', 0x8);
                         } else {
                             $Packet .= pack('v', 0x0);
                         }
                         // Server Status
                         SendPacket($Packet);
                         FlushPackets();
                         mysqli_free_result($result);
                     }
                 }
             } while (mysqli_next_result($mysqli));
         }
     }
 }
require_once "connect.inc";
$tmp = NULL;
$link = NULL;
if (!is_null($tmp = @mysqli_warning_count())) {
    printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
}
if (!is_null($tmp = @mysqli_warning_count($link))) {
    printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
}
require 'table.inc';
if (NULL !== ($tmp = @mysqli_warning_count($link, "too_many"))) {
    printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
}
if (!($res = mysqli_query($link, "SELECT id, label FROM test"))) {
    printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
}
if (0 !== ($tmp = mysqli_warning_count($link))) {
    printf("[005] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
}
if (!mysqli_query($link, "DROP TABLE IF EXISTS this_table_does_not_exist")) {
    printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
}
if (1 !== ($tmp = mysqli_warning_count($link))) {
    printf("[007] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
}
mysqli_close($link);
if (NULL !== ($tmp = mysqli_warning_count($link))) {
    printf("[010] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
}
print "done!";
printf("mysqli->stat = '%s'/%s ('%s'/%s)\n", $mysqli->stat, gettype($mysqli->stat), mysqli_stat($link), gettype(mysqli_stat($link)));
assert(mysqli_get_host_info($link) === $mysqli->host_info);
printf("mysqli->host_info = '%s'/%s ('%s'/%s)\n", $mysqli->host_info, gettype($mysqli->host_info), mysqli_get_host_info($link), gettype(mysqli_get_host_info($link)));
/* note that the data types are different */
assert(mysqli_info($link) == $mysqli->info);
printf("mysqli->info = '%s'/%s ('%s'/%s)\n", $mysqli->info, gettype($mysqli->info), mysqli_info($link), gettype(mysqli_info($link)));
assert(mysqli_thread_id($link) > $mysqli->thread_id);
assert(gettype($mysqli->thread_id) == gettype(mysqli_thread_id($link)));
printf("mysqli->thread_id = '%s'/%s ('%s'/%s)\n", $mysqli->thread_id, gettype($mysqli->thread_id), mysqli_thread_id($link), gettype(mysqli_thread_id($link)));
assert(mysqli_get_proto_info($link) === $mysqli->protocol_version);
printf("mysqli->protocol_version = '%s'/%s ('%s'/%s)\n", $mysqli->protocol_version, gettype($mysqli->protocol_version), mysqli_get_proto_info($link), gettype(mysqli_get_proto_info($link)));
assert(mysqli_get_server_info($link) === $mysqli->server_info);
printf("mysqli->server_info = '%s'/%s ('%s'/%s)\n", $mysqli->server_info, gettype($mysqli->server_info), mysqli_get_server_info($link), gettype(mysqli_get_server_info($link)));
assert(mysqli_get_server_version($link) === $mysqli->server_version);
printf("mysqli->server_version = '%s'/%s ('%s'/%s)\n", $mysqli->server_version, gettype($mysqli->server_version), mysqli_get_server_version($link), gettype(mysqli_get_server_version($link)));
assert(mysqli_warning_count($link) === $mysqli->warning_count);
printf("mysqli->warning_count = '%s'/%s ('%s'/%s)\n", $mysqli->warning_count, gettype($mysqli->warning_count), mysqli_warning_count($link), gettype(mysqli_warning_count($link)));
printf("\nAccess to undefined properties:\n");
printf("mysqli->unknown = '%s'\n", @$mysqli->unknown);
@($mysqli->unknown = 13);
printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
$unknown = 'friday';
@($mysqli->unknown = $unknown);
printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
printf("\nAccess hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):\n");
assert(mysqli_connect_error() === $mysqli->connect_error);
printf("mysqli->connect_error = '%s'/%s ('%s'/%s)\n", $mysqli->connect_error, gettype($mysqli->connect_error), mysqli_connect_error(), gettype(mysqli_connect_error()));
assert(mysqli_connect_errno() === $mysqli->connect_errno);
printf("mysqli->connect_errno = '%s'/%s ('%s'/%s)\n", $mysqli->connect_errno, gettype($mysqli->connect_errno), mysqli_connect_errno(), gettype(mysqli_connect_errno()));
print "done!";
Esempio n. 12
0
}
if (!is_string($warning->sqlstate) || '' == $warning->sqlstate) {
    /* NULL or not there at all */
    printf("[012] Expecting string/not empty, got %s/%s\n", gettype($warning->sqlstate), $warning->sqlstate);
}
if (!is_int($warning->errno) || 0 == $warning->errno) {
    /* NULL or not there at all */
    printf("[013] Expecting int/not 0, got %s/%s\n", gettype($warning->errno), $warning->errno);
}
if (false !== ($tmp = $warning->next())) {
    printf("[014] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
}
if (!mysqli_query($link, "INSERT INTO test (id) VALUES (1000000), (1000001)")) {
    printf("[015] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
}
if (($tmp = mysqli_warning_count($link)) !== 2) {
    printf("[016] Expecting 2 warnings, got %d warnings", $tmp);
}
if (!is_object($warning = mysqli_get_warnings($link)) || 'mysqli_warning' != get_class($warning)) {
    printf("[017] Expecting object/mysqli_warning, got %s/%s\n", gettype($tmp), is_object($tmp) ? var_dump($tmp, true) : $tmp);
}
if (true !== ($tmp = $warning->next())) {
    printf("[018] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
}
if (false !== ($tmp = $warning->next())) {
    printf("[020] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
}
mysqli_close($link);
if (!($mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket))) {
    printf("[021] Cannot create mysqli object: [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
}