getMessage().':'.$mdb2->getUserInfo()); if ($server_type == 'mysql') { mdb2_exec($mdb2, "SET SESSION group_concat_max_len = 65536"); mdb2_exec($mdb2, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_520_ci'"); //MDB2_Driver_mysql::setCharset([ 'utf8', 'utf8_unicode_ci' ], $mdb2->getConnection()); } return $mdb2; } function mdb2_res_table($res) { $no_columns = $res->numCols(); $columns = $res->getColumnNames(true); //print_r($columns); if ($no_columns == 0) return; ?>fetchRow(MDB2_FETCHMODE_ORDERED)) { ?>
?'); ?>
NULL'); else echo($data); ?>
seek(); // reset row pointer } // format characters // %% -> % // %q -> string to be escaped, must already be insides 's in $format // %w -> string to be escaped, must already be insides 's in $format, also escapes wildcard characters // %i -> positive integer // %I -> SQL IDENTIFIER quoting function mdb2_vprintf($mdb2, $format, $args) { $out = ''; $arg = 0; while (($pos = strpos($format, '%')) !== FALSE) { $out .= substr($format, 0, $pos); switch ($format[$pos + 1]) { case '%': $out .= '%'; break; case 'I': if (count($args) <= $arg) error_system('te weinig argumenten'); $out .= $mdb2->quoteIdentifier($args[$arg]); $arg++; break; case 'q': if (count($args) <= $arg) error_system('te weinig argumenten'); $out .= $mdb2->escape($args[$arg]); $arg++; break; case 'w': if (count($args) <= $arg) error_system('te weinig argumenten'); $out .= $mdb2->escape($args[$arg], true); $arg++; break; case 'i': if (count($args) <= $arg) error_system('te weinig argumenten'); $val = (int)$args[$arg]; if ($val === NULL) { $out .= 'NULL'; } else { if ($val != $args[$arg]) error_system('SQL argument is geen integer'); if ($val < 0) error_system('SQL argument is een negatieve integer: '.$val); $out .= $val; } $arg++; break; default: error_system('onzinnig format character ->'.$format[$pos+1].'<-'); break; } $format = substr($format, $pos + 2); } if ($arg != count($args)) error_system('te veel argumenten voor format string'); //echo($out.$format); return $out.$format; } function mdb2_printf($db, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vprintf($db, $format, $args); } function mdb2_vquery($mdb2, $format, $args) { $res = $mdb2->query(mdb2_vprintf($mdb2, $format, $args)); if (MDB2::isError($res)) { $errorInfo = $mdb2->errorInfo($res); error_system($res->getMessage().': '.$errorInfo[2]." query ".$format); } return $res; } function mdb2_query($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vquery($mdb2, $format, $args); } function mdb2_vexec_error($mdb2, $err, $format, $args) { $affected = $mdb2->exec(mdb2_vprintf($mdb2, $format, $args)); if (MDB2::isError($affected)) { if (MDB2::isError($affected, $err)) { return false; } else { $errorInfo = $mdb2->errorInfo($affected); error_system($affected->getMessage().': '.$errorInfo[2]); } } return true; } function mdb2_exec_error($mdb2, $err, $format) { $args = func_get_args(); array_shift($args); array_shift($args); array_shift($args); return mdb2_vexec_error($mdb2, $err, $format, $args); } // warning: returns false if no error and returns native errorcode if error function mdb2_vexec_native_errors($mdb2, $errs, $format, $args) { $affected = $mdb2->exec(mdb2_vprintf($mdb2, $format, $args)); if (MDB2::isError($affected)) { $errorInfo = $mdb2->errorInfo($affected); $native_code = $errorInfo[1]; if (in_array($native_code, $errs)) return $native_code; else error_system($affected->getMessage().': '.$errorInfo[2].' ('.$errorInfo[1].')'); } return false; } function mdb2_exec_native_errors($mdb2, $errs, $format) { $args = func_get_args(); array_shift($args); array_shift($args); array_shift($args); return mdb2_vexec_native_errors($mdb2, $errs, $format, $args); } function mdb2_vexec($mdb2, $format, $args) { $affected = $mdb2->exec(mdb2_vprintf($mdb2, $format, $args)); if (MDB2::isError($affected)) { $errorInfo = $mdb2->errorInfo($affected); error_system($affected->getMessage().': '.$errorInfo[2]." query ".$format); } return $affected; } function mdb2_exec($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vexec($mdb2, $format, $args); } function mdb2_vsingle_row($mdb2, $mode, $format, $args) { $res = mdb2_vquery($mdb2, $format, $args); $array = $res->fetchRow($mode); $res->free(); return $array; } function mdb2_single_row($mdb2, $mode, $format) { $args = func_get_args(); array_shift($args); array_shift($args); array_shift($args); return mdb2_vsingle_row($mdb2, $mode, $format, $args); } function mdb2_single_array($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vsingle_row($mdb2, MDB2_FETCHMODE_ORDERED, $format, $args); } function mdb2_single_assoc($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vsingle_row($mdb2, MDB2_FETCHMODE_ASSOC, $format, $args); } function mdb2_single_val($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); $res = mdb2_vquery($mdb2, $format, $args); $array = $res->fetchRow(); $res->free(); if (isset($array[0])) return $array[0]; else return NULL; } function mdb2_vall($mdb2, $mode, $rekey, $force_array, $group, $format, $args) { $res = mdb2_vquery($mdb2, $format, $args); $array = $res->fetchAll($mode, $rekey, $force_array, $group); $res->free(); return $array; } function mdb2_vcol($mdb2, $no, $format, $args) { $res = mdb2_vquery($mdb2, $format, $args); $array = $res->fetchCol($no); $res->free(); return $array; } function mdb2_all_ordered($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vall($mdb2, MDB2_FETCHMODE_ORDERED, false, false, false, $format, $args); } function mdb2_all_assoc($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vall($mdb2, MDB2_FETCHMODE_ASSOC, false, false, false, $format, $args); } function mdb2_all_assoc_rekey($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vall($mdb2, MDB2_FETCHMODE_ASSOC, true, false, false, $format, $args); } function mdb2_all_ordered_rekey($mdb2, $format) { $args = func_get_args(); array_shift($args); array_shift($args); return mdb2_vall($mdb2, MDB2_FETCHMODE_ORDERED, true, false, false, $format, $args); } function mdb2_col($mdb2, $no, $format) { $args = func_get_args(); array_shift($args); array_shift($args); array_shift($args); return mdb2_vcol($mdb2, $no, $format, $args); } function mdb2_dump_table($db, $table) { // get datatypes of columns $datatypes = mdb2_all_assoc_rekey($db, "SELECT column_name, data_type FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '%q'", $table); //print_r($datatypes); $cols_array = array(); foreach ($datatypes as $key => $val) { $cols_array[] = $key; if ($val == 'int') $formats_array[] = '%i'; else $formats_array[] = "'%q'"; } $formats = implode(', ', $formats_array); $cols = implode(', ', $cols_array); $res = mdb2_query($db, "SELECT $cols FROM $table"); //mdb2_res_table($res); $count = 0; while (($row = $res->fetchRow(MDB2_FETCHMODE_ORDERED))) { if (!($count++)) echo("INSERT INTO $table ( $cols ) VALUES\n"); echo(mdb2_vprintf($db, "( $formats )", $row)); if ($count < 512) echo(','); else { $count = 0; echo(';'); } echo("\n"); } //$row = $res->fetchRow(MDB2_FETCHMODE_ORDERED); //print_r($row); //echo("INSERT INTO $table ( $cols ) VALUES ( $formats )"); //echo(mdb2_vprintf($db, "INSERT INTO $table ( $cols ) VALUES ( $formats )", $row)); } function mdb2_dump($db) { global $show_tables; //$tables = mdb2_col($db, 0, $show_tables); //foreach($tables as $table) mdb2_dump_table($db, $table); mdb2_dump_table($db, 'grp'); } /* $res: db query result * $filename: filename for export, watch out for Content-Disposion unsafe characters (comma...) * $headers: - true = get column titles from $res * - array() = use this array * - false = no column titles */ function mdb2_res_export_excel($res, $filename = 'export.csv', $headers = true) { /* we'll send a .csv file */ header("Content-type: text/csv"); /* some red tape to avoid bugs and weird errormessages in IE */ header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header('Content-Disposition: attachment; filename='.$filename.';'); $file = fopen('php://output', 'w'); if (!$file) fatal_error('unable to open output'); if (is_array($headers)) fputcsv($file, $headers, ';'); else if ($headers === true) { fputcsv($file, $res->getColumnNames($res), ';'); } while (($row = $res->fetchRow(MDB2_FETCHMODE_ORDERED))) { fputcsv($file, $row, ';'); } } function mdb2_export_excel($db, $filename, $format) { $args = func_get_args(); array_shift($args); array_shift($args); array_shift($args); mdb2_res_export_excel(mdb2_vquery($db, $format, $args), $filename); } ?>