我有两个选择查询返回不同的结果,如下所示:
此查询返回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 . '';
我确定我忽略了一些东西但却无法找到问题。
答案 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注入或意外数据破坏查询。