Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Emacs中使用SQL查询编写PHP_Php_Mysql_Emacs - Fatal编程技术网

在Emacs中使用SQL查询编写PHP

在Emacs中使用SQL查询编写PHP,php,mysql,emacs,Php,Mysql,Emacs,我应该在Emacs中使用什么来开发带有SQL查询的PHP文件 缩进缓冲区时,代码应如下所示: <?php $query = " SELECT id, name FROM products WHERE id > 12" ?> <?php $query = " SELECT id, name FROM products WHERE id > 12" ?> 在web

我应该在Emacs中使用什么来开发带有SQL查询的PHP文件

缩进缓冲区时,代码应如下所示:

<?php
$query = "
    SELECT
        id,
        name
    FROM 
        products
    WHERE 
        id > 12"
?>
<?php 
$query = "
SELECT
id,
name
FROM
products
WHERE
id > 12"
?>

在web模式和php模式下,如下所示:

<?php
$query = "
    SELECT
        id,
        name
    FROM 
        products
    WHERE 
        id > 12"
?>
<?php 
$query = "
SELECT
id,
name
FROM
products
WHERE
id > 12"
?>



如果这是不可能的,一种替代方法是在PHP代码中的多行字符串中启用手动缩进(使用TAB和ShiftTAB,就像在Sublime和其他编辑器中一样)。我该怎么做呢?

Emacs不能很好地用PHP处理SQL。有一个扩展,您可以得到它,它应该只对SQL有帮助,所以我不确定它是否会按照您希望的方式使用PHP代码。不过,使用Emacs还有其他替代方法,我强烈建议您这样做。

在缓冲区缩进时自动执行此操作将非常困难,您可以尝试多种主要模式,但这并不理想

一种解决方案是编写一个函数来格式化光标下的sql,然后在完成查询字符串的编写后,可以手动运行此命令

此示例需要两个包:
expand region
sqlindent
,这两个包都可以在MELPA上下载

如果您安装了软件包,此函数将在点处格式化SQL,这还将根据周围代码的深度处理整个SQL字符串的缩进,这与注释中的解决方案不同

(defun sql-indent-string ()
  "Indents the string under the cursor as SQL."
  (interactive)
  (save-excursion
    (er/mark-inside-quotes)
    (let* ((text (buffer-substring-no-properties (region-beginning) (region-end)))
           (pos (region-beginning))
           (column (progn (goto-char pos) (current-column)))
           (formatted-text (with-temp-buffer
                             (insert text)
                             (delete-trailing-whitespace)
                             (sql-indent-buffer)
                             (replace-string "\n" (concat "\n" (make-string column (string-to-char " "))) nil (point-min) (point-max))
                             (buffer-string))))
      (delete-region (region-beginning) (region-end))
      (goto-char pos)
      (insert formatted-text))))
该函数的工作方式是复制光标下的字符串,并将其移动到一个临时缓冲区,sql indent将在该缓冲区中对其进行格式化,然后返回到原始缓冲区并用新字符串替换旧字符串。它很实用,但不美观


web模式的最新版本(9.0.84)(在上提供)在块字符串中提供本机sql缩进。

另请参见。@phils-Hmm,它几乎可以工作。压痕有点不对劲。它不考虑PHP代码的缩进级别,但它确实缩进了SQL代码。我无法使它与问题中的代码(第二部分)一起工作。我是否可以在第三行,按
TAB
并将其缩进?选择应紧跟其后“而且你确定你有最新版本吗?太好了!它适用于示例,但即使
SELECT
位于新行,我是否可以使其缩进?此外,在
JOIN
中使用
SELECT
时,似乎存在错误<代码>插入查询也不会缩进。这是一个很好的开始,但似乎需要更多的工作。我添加了突出显示和与插入、更新、删除的兼容性。我不打算在新线上做缩进。如果您有其他请求和问题,请在github上打开一个问题(感谢Jordon Biondo!但是,我想添加从中调用函数'sqlup capitalize keywords in region'。当我在函数中添加
sqlup capitalize keywords in region
并从sql字符串调用它时,我得到了一个空结果。有什么提示吗?你能将其转换为次要模式吗?