2012-01-09 108 views
0

我正在学习使用Wampserver,Crimson编辑器和the New Boston tutorials的SQL。直到我更改引号时才起作用:奇怪的引号行为

使用SQL命令,常规'单引号'不起作用,但是weird slanty quotes可以。

当使用表格和$_GET["name"];只有双引号将工作。

任何想法这里发生了什么?我使用英式键盘,但视频导师也是如此,他使用单引号$_GET['name'];

编辑:示例代码:

if(isset($_GET["sortBy"])&&!empty($_GET["sortBy"])) // only works with "full" quotes 
{ $sortBy   = $_GET["sortBy"]; 
    echo "sortBy works <br><br>"; 
} 
$topTenResult = "SELECT `name`,`intuition`,`bravery`,`romance` FROM `scores` ORDER BY $sortBy DESC"; 
// does not work with default keyboard single quotes 
+2

向我们展示代码。您描述参考PHP代码不是MySQL,如标签所示。 – 2012-01-09 18:23:17

+0

if(isset($ _GET [“sortBy”])&&!empty($ _GET [“sortBy”])) {\t $ sortBy \t \t \t = $ _GET [“sortBy”]; \t echo“sortBy works

”; } //直到我改为双引号为止,这个功能才起作用 – 2012-01-09 18:25:15

+0

$ topTenResult \t =“SELECT'name','intuition','bravery','romance' FROM'scores' ORDER BY $ sortBy DESC”;//这与默认键盘单引号不起作用 – 2012-01-09 18:26:15

回答

2

在SQL中,单引号标记字符串。

在MySQL中,反引号标记'分隔标识符'。这些是区分大小写或与关键字相冲突的名称。后面的引号对于MySQL来说是独一无二的; MS SQL Server对同一作业使用方括号。两者都是非标准的扩展。

在标准SQL中,双引号用于标记分隔标识符。某些DBMS将双引号视为标记字符串,除非置入符合标准的模式;一些将它们自动作为分隔标识符处理。

+0

谢谢!现在更清楚了。 – 2012-01-09 18:32:27

2

这是具有嵌套引号的症状。

.... " ... $_GET["name"] ... 

上面出错了,因为$ _GET在双引号字符串中。因此,搜索一个虚假的双引号,这会使您的代码出错。

也许语法着色有帮助(如在NetBeans IDE中,具有良好的PHP支持)。