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


Query returns different (no) results when using a variable

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

此查询返回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 . '';

我确信我忽略了什么,但找不到问题所在。

"单引号字符串是而不是插值的"

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

考虑一下这个显示问题的琐碎示例,主要是查询实际上使用了LIKE "$last":

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

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