ExecuteSqlTrait.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Niucloud-admin 企业快速开发的多应用管理平台
  4. // +----------------------------------------------------------------------
  5. // | 官方网址:https://www.niucloud.com
  6. // +----------------------------------------------------------------------
  7. // | niucloud团队 版权所有 开源版本可自由商用
  8. // +----------------------------------------------------------------------
  9. // | Author: Niucloud Team
  10. // +----------------------------------------------------------------------
  11. namespace app\service\admin\upgrade;
  12. /**
  13. * 执行sql文件
  14. */
  15. trait ExecuteSqlTrait
  16. {
  17. public function getSqlQuery($sql_data)
  18. {
  19. $sql_data = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\\1 DEFAULT CHARSET=utf8", $sql_data);
  20. $sql_data = str_replace("\r", "\n", $sql_data);
  21. $sql_query = [];
  22. $num = 0;
  23. $sql_arr = explode(";\n", trim($sql_data));
  24. unset($sql);
  25. foreach ($sql_arr as $sql) {
  26. $sql_query[ $num ] = '';
  27. $sqls = explode("\n", trim($sql));
  28. $sqls = array_filter($sqls);
  29. foreach ($sqls as $query) {
  30. $str1 = $query[0] ?? '';
  31. if ($str1 != '#' && $str1 != '-')
  32. $sql_query[ $num ] .= $query;
  33. }
  34. $num++;
  35. }
  36. return $sql_query;
  37. }
  38. /**
  39. * 处理sql增加表前缀
  40. * @param $sql
  41. * @return void
  42. */
  43. public function handleSqlPrefix($sql, $prefix) {
  44. if (str_contains($sql, 'CREATE TABLE')) {
  45. $match_item = preg_match('/CREATE TABLE [`]?(\\w+)[`]?/is', $sql, $match_data);
  46. } elseif (str_contains($sql, 'ALTER TABLE')) {
  47. $match_item = preg_match('/ALTER TABLE [`]?(\\w+)[`]?/is', $sql, $match_data);
  48. } elseif (str_contains($sql, 'INSERT INTO')) {
  49. $match_item = preg_match('/INSERT INTO [`]?(\\w+)[`]?/is', $sql, $match_data);
  50. } elseif (str_contains($sql, 'DELETE FROM')) {
  51. $match_item = preg_match('/DELETE FROM [`]?(\\w+)[`]?/is', $sql, $match_data);
  52. } elseif (str_contains($sql, 'UPDATE')) {
  53. $match_item = preg_match('/UPDATE [`]?(\\w+)[`]?/is', $sql, $match_data);
  54. } elseif (str_contains($sql, 'DROP TABLE IF EXISTS')) {
  55. $match_item = preg_match('/DROP TABLE IF EXISTS [`]?(\\w+)[`]?/is', $sql, $match_data);
  56. } elseif (str_contains($sql, 'DROP TABLE')) {
  57. $match_item = preg_match('/DROP TABLE [`]?(\\w+)[`]?/is', $sql, $match_data);
  58. } else {
  59. $match_item = 0;
  60. }
  61. if ($match_item > 0) {
  62. $table_name = $match_data[ 1 ];
  63. $new_table_name = $prefix . $table_name;
  64. $sql = implode($new_table_name, explode($table_name, $sql, 2));
  65. }
  66. return $sql;
  67. }
  68. }