Topic: mysqli usage
hello yall,
i was wondering why FA keeps using mysql_connect and other old functions, the $godebug=1 keeps reminding me that these fucntions are indeed deprecated and will be no longer supported by future php release?!!
At the same time i had a look at webERP source code which actually support mysqli, mariadb and even postrgres.
Anyway, i rewrited connect_db.inc, 15 min of work, i even borrowed the DB_escape_string() (thanks guys) from webERP, and FA works just fine. well here's the code, feel free to try it or modify it and i'll be very glad if you have any suggestions/comments or improvements ...
<?php
function set_global_connection($company = -1) {
global $db, $transaction_level, $db_connections;
cancel_transaction(); // cancel all aborted transactions if any
$transaction_level = 0;
if ($company == -1)
$company = $_SESSION["wa_current_user"]->company;
$_SESSION["wa_current_user"]->cur_con = $company;
$connection = $db_connections[$company];
$db = mysqli_connect($connection["host"], $connection["dbuser"], $connection["dbpassword"]);
mysqli_select_db($db, $connection["dbname"]);
return $db;
}
$db_duplicate_error_code = 1062;
//DB wrapper functions to change only once for whole application
function db_query($sql, $err_msg = null) {
global $db, $show_sql, $sql_trail, $select_trail, $go_debug, $sql_queries, $Ajax,
$db_connections, $db_last_inserted_id;
// set current db prefix
$cur_prefix = $db_connections[$_SESSION["wa_current_user"]->cur_con]['tbpref'];
$sql = str_replace(TB_PREF, $cur_prefix, $sql);
if ($show_sql) {
$Ajax->activate('footer_debug');
$sql_queries .= "<pre>$sql</pre>\n<hr>";
}
//$result = mysql_query($sql, $db);
$result = mysqli_query($db, $sql);
if ($sql_trail) {
$db_last_inserted_id = mysql_insert_id($db); // preserve in case trail insert is done
if ($select_trail || (strstr($sql, 'SELECT') === false)) {
mysqli_query($db, "INSERT INTO " . $cur_prefix . "sql_trail
(`sql`, `result`, `msg`)
VALUES(" . db_escape($sql) . "," . ($result ? 1 : 0) . ",
" . db_escape($err_msg) . ")");
}
}
if ($err_msg != null || $go_debug) {
$exit = $err_msg != null;
if (function_exists('xdebug_call_file'))
check_db_error('<br>At file ' . xdebug_call_file() . ':' . xdebug_call_line() . ':<br>' . $err_msg, $sql, $exit);
else
check_db_error($err_msg, $sql, $exit);
}
return $result;
}
function db_fetch_row($result) {
return mysqli_fetch_row($result);
}
function db_fetch_assoc($result) {
return mysqli_fetch_assoc($result);
}
function db_fetch($result) {
return mysqli_fetch_array($result);
}
function db_seek(&$result, $record) {
return mysqli_data_seek($result, $record);
}
function db_free_result($result) {
if ($result)
mysqli_free_result($result);
}
function db_num_rows($result) {
return mysqli_num_rows($result);
}
function db_num_fields($result) {
return mysqli_num_fields($result);
}
function db_escape($value = "", $nullify = false) {
$value = @html_entity_decode($value, ENT_QUOTES, $_SESSION['language']->encoding);
$value = @htmlspecialchars($value, ENT_QUOTES, $_SESSION['language']->encoding);
//reset default if second parameter is skipped
$nullify = ($nullify === null) ? (false) : ($nullify);
//check for null/unset/empty strings
if ((!isset($value)) || (is_null($value)) || ($value === "")) {
$value = ($nullify) ? ("NULL") : ("''");
} else {
if (is_string($value)) {
//value is a string and should be quoted; determine best method based on available extensions
if (function_exists('mysql_real_escape_string')) {
$value = "'" . DB_escape_string($value) . "'";
} else {
$value = "'" . DB_escape_string($value) . "'";
}
} else if (!is_numeric($value)) {
//value is not a string nor numeric
display_error("ERROR: incorrect data type send to sql query");
echo '<br><br>';
exit();
}
}
return $value;
}
function db_error_no() {
global $db;
return mysqli_connect_errno();
}
function db_error_msg($conn) {
return mysqli_error($conn);
}
function db_insert_id() {
global $db_last_inserted_id, $sql_trail, $db;
return $sql_trail ? $db_last_inserted_id : mysqli_insert_id($db);
}
function db_num_affected_rows() {
global $db;
return mysqli_affected_rows($db);
}
function db_field_name($result, $n) {
return mysqli_field_name($result, $n);
}
function db_create_db($connection) {
$db = mysqli_connect($connection["host"], $connection["dbuser"], $connection["dbpassword"]);
if (!mysqli_select_db($db, $connection["dbname"])) {
$sql = "CREATE DATABASE IF NOT EXISTS " . $connection["dbname"] . "";
if (!mysqli_query($db, $sql) || !mysqli_select_db($db, $connection["dbname"]))
return 0;
}
return $db;
}
function db_drop_db($connection) {
if ($connection["tbpref"] == "") {
$sql = "DROP DATABASE IF EXISTS " . $connection["dbname"] . "";
return mysqli_query($db, $sql);
} else {
$res = db_query("show table status");
$all_tables = array();
while ($row = db_fetch($res))
$all_tables[] = $row;
// get table structures
foreach ($all_tables as $table) {
if (strpos($table['Name'], $connection["tbpref"]) === 0) {
db_query("DROP TABLE `" . $table['Name'] . "`");
}
}
//deleting the tables, how??
return true;
}
}
function db_close($dbase = null) {
global $db;
if (!$dbase)
$dbase = $db;
return mysqli_close($dbase);
}
function DB_escape_string($String) {
global $db;
return mysqli_real_escape_string($db, htmlspecialchars($String, ENT_COMPAT, 'utf-8', false));
}
?>