在MySQL中使用Php变量时更正语法

时间:2015-03-27 16:13:45

标签: php mysql

这应该不是那么困难,但我在为ORDER BY子句插入Php变量时尝试的每次迭代都会遇到mySQL语法错误。我的专栏是:

...ORDER BY '$choice', substring_index(Name, " ", -1);

我尝试将变量$ choice放在双引号,括号,括号,引号和括号中,没有任何效果。我错过了什么?

4 个答案:

答案 0 :(得分:0)

您可以使用case

order by (case when '$choice' = col1 then col1 end),
         (case when '$choice' = col2 then col2 end),
         . . .
         substring_index(Name, ' ', -1)

多个case优于一个,因为更容易支持不同的类型。

另一种选择是动态SQL。

答案 1 :(得分:0)

尝试以下用例,

1.如果你的列名包含空格,那么

ORDER BY `{$choice}`

2.如果它是php变量中的一个简单字符串,那么

 $choice = "your_column_name";
  SELECT * FROM table_name ORDER BY $choice ASC

答案 2 :(得分:0)

我用双引号括起我的整个查询,然后就可以使用像这样的变量

$sql = "SELECT * FROM $tables ORDER BY $orderparams"

答案 3 :(得分:-1)

这可能是你声明你的字符串是问题的方式。使用错误类型的引号进行变量插值将导致它失败并按字面解析变量名称。只有当您有一个带双引号的字符串时,变量插值才有效。例如:

$myVariable = "hello world";
echo "This is a php variable --> $myVariable";
// will print "This is a php variable --> hello world"
echo 'This is the literal string --> $myVariable';
// will print "This is the literal string --> $myVariable"

实现与第一个示例相同的插值的另一种方法是不存在插入错误的可能性:

echo "This is a php variable between characters abc{$myVariable}def";
// will print "This is a php variable between characters abchello worlddef"

不确定这是否是问题,因为你的问题缺乏声明查询字符串的上下文,但在使用php时需要注意。