X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fdb%2Flib-mysql3.php;h=c3369299057b789583e7a10acf90de706c26ac60;hb=85aa6f0f85efbb08a829e3c89d897ceadab69b0e;hp=c9b033172e552df591a0389b62c12f4f02338afa;hpb=19fc9f2c0cdd76900c082e525a43a4a5decb1a56;p=mailer.git diff --git a/inc/db/lib-mysql3.php b/inc/db/lib-mysql3.php index c9b033172e..c336929905 100644 --- a/inc/db/lib-mysql3.php +++ b/inc/db/lib-mysql3.php @@ -17,7 +17,7 @@ * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * * Copyright (c) 2009 - 2011 by Mailer Developer Team * - * For more information visit: http://www.mxchange.org * + * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -341,8 +341,20 @@ function SQL_RESULT_FROM_ARRAY ($table, $columns, $idRow, $id, $F, $L) { return false; } // END - if - // Prepare the SQL statement - $sql = "SELECT `".implode("`,`", $columns)."` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1"; + // Is this is a simple array? + if ((is_array($columns[0])) && (isset($columns[0]['column']))) { + // Begin with SQL query + $sql = 'SELECT '; + + // No, it comes from XML, so get it back from it + $sql .= getSqlPartFromXmlArray($columns); + + // Finalize it + $sql .= " FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1"; + } else { + // Yes, prepare the SQL statement + $sql = 'SELECT `' . implode('`,`', $columns) . "` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1"; + } // Return the result return SQL_QUERY_ESC($sql, @@ -363,16 +375,16 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) { $result = false; // Determine index/fulltext/unique word - $noIndex = ( - ( - strpos($sql, 'INDEX') === false - ) && ( - strpos($sql, 'KEY') === false - ) && ( - strpos($sql, 'FULLTEXT') === false - ) && ( - strpos($sql, 'UNIQUE') === false - ) + $isAlterIndex = ( + ( + isInString('INDEX', $sql) + ) || ( + isInString('KEY', $sql) + ) || ( + isInString('FULLTEXT', $sql) + ) || ( + isInString('UNIQUE', $sql) + ) ); // Extract table name @@ -380,10 +392,10 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) { $tableName = str_replace('`', '', $tableArray[2]); // Debug log - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sql . ',tableName=' . $tableName . ',tableArray=
' . print_r($tableArray, true) . '
'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sql . ',tableName=' . $tableName . ',tableArray=
' . print_r($tableArray, true) . '
,isAlterIndex=' . intval($isAlterIndex)); // Shall we add/drop? - if (((strpos($sql, 'ADD') !== false) || (strpos($sql, 'DROP') !== false) || (strpos($sql, 'CHANGE') !== false)) && ($noIndex === true)) { + if (((isInString('ADD', $sql)) || (isInString('DROP', $sql)) || (isInString('CHANGE', $sql))) && ($isAlterIndex === false)) { // Try two columns, one should fix foreach (array(4,5) as $idx) { // If an entry is not set, abort here @@ -400,20 +412,18 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'columnName=' . $columnName . ',idx=' . $idx . ',sql=' . $sql . ',hasZeroNums=' . intval(isSqlTableColumnFound($tableName, $columnName))); // Do we have no entry on ADD or an entry on DROP/CHANGE? - // 123 4 43 3 4 4 32 23 4 43 34 5 5 4 45 6 6 5 5 5 56 7 76 6 654321 - if (((!isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'ADD') !== false)) || ((isSqlTableColumnFound($tableName, $columnName)) && ((strpos($sql, 'DROP') !== false) || ((strpos($sql, 'CHANGE') !== false) && ($idx == 4) && ((!isSqlTableColumnFound($tableName, $tableArray[5])) || ($columnName == $tableArray[5])))))) { + if (((!isSqlTableColumnFound($tableName, $columnName)) && (isInString('ADD', $sql))) || ((isSqlTableColumnFound($tableName, $columnName)) && ((isInString('DROP', $sql)) || ((isInString('CHANGE', $sql)) && ($idx == 4) && ((!isSqlTableColumnFound($tableName, $tableArray[5])) || ($columnName == $tableArray[5])))))) { // Do the query //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Executing: ' . $sql); $result = SQL_QUERY($sql, $F, $L, false); // Skip further attempt(s) break; - // 1234 5 54 4 5 5 43 34 5 54 45 6 6 54 4 5 5 432 2 21 - } elseif ((((isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'ADD') !== false)) || ((!isSqlTableColumnFound($tableName, $columnName)) && ((strpos($sql, 'DROP') !== false)) || (strpos($sql, 'CHANGE') !== false))) && ($columnName != 'KEY')) { + } elseif ((((isSqlTableColumnFound($tableName, $columnName)) && (isInString('ADD', $sql))) || ((!isSqlTableColumnFound($tableName, $columnName)) && ((isInString('DROP', $sql))) || (isInString('CHANGE', $sql)))) && ($columnName != 'KEY')) { // Abort here because it is alreay there //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Skipped: sql=' . $sql . ',columnName=' . $columnName . ',idx=' . $idx); break; - } elseif ((!isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'DROP') !== false)) { + } elseif ((!isSqlTableColumnFound($tableName, $columnName)) && (isInString('DROP', $sql))) { // Abort here because we tried to drop a column which is not there (never created maybe) //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'No drop: ' . $sql); break; @@ -422,10 +432,10 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) { logDebugMessage(__FUNCTION__, __LINE__, 'Possible problem: ' . $sql . ',hasZeroNums=' . intval(isSqlTableColumnFound($tableName, $columnName)) . ''); } } // END - foreach - } elseif ((getTableType() == 'InnoDB') && (strpos($sql, 'FULLTEXT') !== false)) { + } elseif ((getTableType() == 'InnoDB') && (isInString('FULLTEXT', $sql))) { // Skip this query silently because InnoDB does not understand fulltext indexes //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Skipped FULLTEXT: sql=%s,tableName=%s,hasZeroNums=%d,file=%s,line=%s", $sql, $tableName, intval((is_bool($result)) ? 0 : isSqlTableColumnFound($columnName)), $F, $L)); - } elseif ($noIndex === false) { + } elseif ($isAlterIndex === true) { // And column name as well without backticks $keyName = str_replace('`', '', $tableArray[5]); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'keyName=' . $keyName . ',tableArray=
' . print_r($tableArray, true) . '
'); @@ -435,7 +445,7 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) { // Init loop $begin = 1; $keyName = ','; - while (strpos($keyName, ',') !== false) { + while (isInString(',', $keyName)) { // Use last //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'keyName=' . $keyName . 'begin=' . $begin . ' - BEFORE'); $keyName = str_replace('`', '', $tableArray[count($tableArray) - $begin]); @@ -581,7 +591,7 @@ function isSqlTableCreated ($tableName) { // Is a table column there? function isSqlTableColumnFound ($tableName, $columnName) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $columName . ' - ENTERED!'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $columnName . ' - ENTERED!'); // Do we have cache? if (!isset($GLOBALS[__FUNCTION__][$tableName][$columnName])) { // And column name as well @@ -600,7 +610,7 @@ function isSqlTableColumnFound ($tableName, $columnName) { } // END - if // Return cache - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $columName . ',result=' . intval($GLOBALS[__FUNCTION__][$tableName][$columnName]) . ' - EXIT!'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $columnName . ',result=' . intval($GLOBALS[__FUNCTION__][$tableName][$columnName]) . ' - EXIT!'); return $GLOBALS[__FUNCTION__][$tableName][$columnName]; }