使用变量时,查询返回不同的(无)结果

时间:2014-09-12 00:16:40

标签: php mysql

我有两个选择查询返回不同的结果,如下所示:

此查询返回29行:

SELECT SQL_CALC_FOUND_ROWS `last`,`first`,`mate`,`address`
  FROM `homeownersnew` 
 WHERE `last` LIKE "s%" AND 
       `address` != "" 
 LIMIT ' . (($pagination->get_page() - 1) * $records_per_page) . ', ' . $records_per_page . '';

此查询使用变量尝试完成相同的结果但返回0行:

@$last = "s%";

SELECT SQL_CALC_FOUND_ROWS `last`,`first`,`mate`,`address`
  FROM `homeownersnew` 
 WHERE `last` LIKE "$last" AND 
       `address` != "" 
 LIMIT ' . (($pagination->get_page() - 1) * $records_per_page) . ', ' . $records_per_page . '';

我确定我忽略了一些东西但却无法找到问题。

1 个答案:

答案 0 :(得分:0)

'single quoted strings are not interpolated'

  

双引号字符串的最重要特性[在单引号字符串中找不到 ]是变量名称将被扩展的事实。有关详细信息,请参阅字符串解析。

考虑这个显示问题的简单示例,主要是查询字面使用LIKE "$last"

$hello = "world";
echo "Hello $hello!"; // => Hello world!
echo 'Hello $hello!'; // => Hello $hello!

在这种情况下,正确的解决方案use parameterized queries。它解决了字符串插值问题,清理代码,并防止SQL注入或意外数据破坏查询。