$querytimeBefore = array_sum(explode(' ', microtime()));
// Run SQL command
- //* DEBUG: */ print($sqlString . '<br />');
+ ///* DEBUG: */ print($sqlString . '<br />');
$result = mysql_query($sqlString, SQL_GET_LINK())
or addFatalMessage(__FUNCTION__, __LINE__, $F . ' (' . $L . '):' . mysql_error() . '<br />
Query string:<br />
' . $sqlString);
- //* DEBUG: */ print(__LINE__ . ': numRows=' . SQL_NUMROWS($result) . ',affected=' . SQL_AFFECTEDROWS() . "<br />");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sqlString . ',numRows=' . SQL_NUMROWS($result) . ',affected=' . SQL_AFFECTEDROWS());
// Ending time
$querytimeAfter = array_sum(explode(' ', microtime()));
// Link is there?
if ((!SQL_IS_LINK_UP()) || (!is_array($data))) return false;
- /* Other way */
// Escape all data
$dataSecured['__sql_string'] = $qstring;
foreach ($data as $key => $value) {
// Generate query
$query = call_user_func_array('sprintf', $dataSecured);
- /*
- /* Old eval() way... *
- // Init variable
- $query = 'failed';
-
- if ($strip === true) {
- $strip = 'true';
- } else {
- $strip = 'false';
- }
-
- if ($secure === true) {
- $secure = 'true';
- } else {
- $secure = 'false';
- }
-
- $eval = "\$query = sprintf(\"" . $qstring . "\"";
- foreach ($data as $var) {
- if ((!empty($var)) || ($var === 0)) {
- $eval .= ", SQL_ESCAPE('" . $var . "', " . $secure . ', ' . $strip . ')';
- } else {
- $eval .= ", ''";
- }
- } // END - foreach
- $eval .= ');';
- **/
// Debugging
//
- //* DEBUG: */ $fp = fopen(getConfig('CACHE_PATH') . 'escape_debug.log', 'a') or app_die(__FILE__, __LINE__, "Cannot write debug.log!");
- //* DEBUG: */ fwrite($fp, $F.'('.$L."): ".str_replace("\r", '', str_replace("\n", " ", $eval))."\n");
- //* DEBUG: */ fclose($fp);
-
- // Run the code
- /**
- eval($eval);
-
- // Was the eval() command fine?
- if ($query == 'failed') {
- // Something went wrong?
- debug_report_bug('eval=' . $eval);
- } // END - if
- **/
+ ///* DEBUG: */ $fp = fopen(getConfig('CACHE_PATH') . 'escape_debug.log', 'a') or app_die(__FILE__, __LINE__, "Cannot write debug.log!");
+ ///* DEBUG: */ fwrite($fp, $F.'('.$L."): ".str_replace("\r", '', str_replace("\n", " ", $eval))."\n");
+ ///* DEBUG: */ fclose($fp);
if ($run === true) {
// Run SQL query (default)
$ret = smartAddSlashes($str);
} elseif (function_exists('mysql_real_escape_string')) {
// The new and improved version
- //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):str={$str}<br />");
+ ///* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'str='.$str);
$ret = mysql_real_escape_string($str, SQL_GET_LINK());
} elseif (function_exists('mysql_escape_string')) {
// The obsolete function
$noIndex = (
(
strpos($sql, 'INDEX') === false
+ ) && (
+ strpos($sql, 'KEY') === false
) && (
strpos($sql, 'FULLTEXT') === false
) && (
);
// Extract table name
- $tableArray = explode(" ", $sql);
+ $tableArray = explode(' ', $sql);
$tableName = str_replace('`', '', $tableArray[2]);
// Shall we add/drop?
if (((strpos($sql, 'ADD') !== false) || (strpos($sql, 'DROP') !== false)) && ($noIndex === true)) {
- // And column name as well
- $columnName = str_replace('`', '', $tableArray[4]);
-
- // Get column information
- $result = SQL_QUERY_ESC("SHOW COLUMNS FROM `%s` LIKE '%s'",
- array($tableName, $columnName), __FILE__, __LINE__);
-
- // Do we have no entry on ADD or an entry on DROP?
- // 123 4 4 3 3 4 4 32 23 4 4 3 3 4 4 321
- if (((SQL_NUMROWS($result) == 0) && (strpos($sql, 'ADD') !== false)) || ((SQL_NUMROWS($result) == 1) && (strpos($sql, 'DROP') !== false))) {
- // Do the query
- //* DEBUG: */ print(__LINE__.':'.$sql."<br />");
- $result = SQL_QUERY($sql, $F, $L, false);
- } // END - if
+ // Try two columns, one should fix
+ foreach (array(4,5) as $idx) {
+ // And column name as well
+ $columnName = str_replace('`', '', $tableArray[$idx]);
+
+ // Get column information
+ $result = SQL_QUERY_ESC("SHOW COLUMNS FROM `%s` LIKE '%s'",
+ array($tableName, $columnName), __FILE__, __LINE__);
+
+ // Do we have no entry on ADD or an entry on DROP?
+ // 123 4 4 3 3 4 4 32 23 4 4 3 3 4 4 321
+ if (((SQL_NUMROWS($result) == 0) && (strpos($sql, 'ADD') !== false)) || ((SQL_NUMROWS($result) == 1) && (strpos($sql, 'DROP') !== false))) {
+ // Do the query
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Executing: ' . $sql);
+ $result = SQL_QUERY($sql, $F, $L, false);
+
+ // Skip further attempt(s)
+ break;
+ } elseif ((((SQL_NUMROWS($result) == 1) && (strpos($sql, 'ADD') !== false)) || ((SQL_NUMROWS($result) == 0) && (strpos($sql, 'DROP') !== false))) && ($columnName != 'KEY')) {
+ // Abort here because it is alreay there
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Skipped: ' . $sql);
+ break;
+ } elseif ($columnName != 'KEY') {
+ // Something didn't fit
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Possible problem: ' . $sql);
+ }
+ } // END - foreach
} elseif ((getConfig('_TABLE_TYPE') == 'InnoDB') && (strpos($sql, 'FULLTEXT') !== false)) {
// Skip this query silently
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Skipped FULLTEXT: sql=%s,file=%s,line=%s", $sql, $F, $L));
} elseif ($noIndex === false) {
// And column name as well
- $columnName = str_replace('`', '', $tableArray[4]);
+ //* DEBUG: */ print __LINE__.':tableArray=<pre>' . print_r($tableArray, true) . '</pre>';
+ $keyName = str_replace('`', '', $tableArray[5]);
// Is this "UNIQUE" or so? FULLTEXT has been handled the elseif() block above
- if (in_array(strtoupper($columnName), array('INDEX', 'UNIQUE', 'KEY', 'FULLTEXT'))) {
+ if (in_array(strtoupper($keyName), array('INDEX', 'UNIQUE', 'KEY', 'FULLTEXT'))) {
// Init loop
- $begin = 1; $columnName = ',';
- while (strpos($columnName, ',') !== false) {
+ $begin = 1; $keyName = ',';
+ while (strpos($keyName, ',') !== false) {
// Use last
- $columnName = str_replace('`', '', $tableArray[count($tableArray) - $begin]);
- //* DEBUG: */ print(__LINE__.':'.$columnName."----------------".$begin."<br />");
+ $keyName = str_replace('`', '', $tableArray[count($tableArray) - $begin]);
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $keyName . '----------------' . $begin);
// Remove brackes
- $columnName = str_replace('(', '', str_replace(')', '', $columnName));
- //* DEBUG: */ print(__LINE__.':'.$columnName."----------------".$begin."<br />");
+ $keyName = str_replace('(', '', str_replace(')', '', $keyName));
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $keyName . '----------------' . $begin);
// Continue
$begin++;
} // END - if
// Show indexes
- $result = SQL_QUERY_ESC("SHOW INDEX FROM `%s`",
- array($tableName), __FILE__, __LINE__);
+ $result = SQL_QUERY_ESC("SHOW INDEX FROM `%s`", array($tableName), __FILE__, __LINE__);
- // Walk through all
+ // Non-skipping is default for ADD
$skip = false;
+
+ // But should we DROP?
+ if ($tableArray[3] == 'DROP') {
+ // Then skip if nothing found!
+ $skip = true;
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Going to drop key ' . $keyName);
+ } // END - if
+
+ // Walk through all
while ($content = SQL_FETCHARRAY($result)) {
// Is it found?
- //* DEBUG: */ print("<pre>".print_r($content, true)."</pre>");
- if (($content['Column_name'] == $columnName) || ($content['Key_name'] == $columnName)) {
+ //* DEBUG: */ print(__LINE__.':columnName='.$keyName.',content=<pre>' . print_r($content, true) . '</pre>');
+ if (($content['Key_name'] == $keyName) && ($tableArray[3] == 'ADD')) {
// Skip this query!
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Skiped: %s", $sql));
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("ADD: Skiped: %s", $sql));
$skip = true;
break;
- } // END - if
+ } elseif (($content['Key_name'] == $keyName) && ($tableArray[3] == 'DROP')) {
+ // Don't skip this!
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("DROP: Not skiped: %s", $sql));
+ $skip = false;
+ break;
+ }
} // END - while
// Free result
// Shall we run it?
if ($skip === false) {
// Send it to the SQL_QUERY() function
- //* DEBUG: */ print(__LINE__.':'.$sql."<br />");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $sql);
$result = SQL_QUERY($sql, $F, $L, false);
- } // END - if
+ } else {
+ // Not executed
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Not executed: ' . $sql);
+ }
} else {
// Other ALTER TABLE query
- //* DEBUG: */ print(__LINE__.':'.$sql."<br />");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $sql);
$result = SQL_QUERY($sql, $F, $L, false);
}