具有$ variable的LIKE运算符

时间:2009-12-03 22:56:38

标签: php sql variables sql-like

这是我在这里的第一个问题,我希望它很简单,可以快速回答!

基本上,我有以下代码:

$variable = curPageURL();
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable' ;

如果我回显$变量,它会打印当前页面的url(这是我页面上的javascript)

最终,我想要的是能够搜索搜索词是当前页面的url,并使用前面和后面的通配符。我不确定这是否可行,或者我是否只是语法错误,因为我没有错误,只是没有结果!

我试过了:

    $query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '"echo $variable" ' ;

但同样,我可能会错过或使用错位的“”等等。

请告诉我我做错了什么!

6 个答案:

答案 0 :(得分:24)

  

最终,我想要的是能够搜索搜索词是当前页面的网址,并在之前和之后使用通配符。

SQL通配符是百分号。因此:

$variable = curPageURL();
$variable = mysql_real_escape_string($variable);
$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '%{$variable}%'";

注意:我添加了一些额外的代码。 mysql_real_escape_string()将故意或意外地使用会破坏您的SQL语句的字符来保护您免受用户的侵害。你最好使用参数化查询,但这是一个比这个简单修复更为复杂的主题。

另请注意:我也修了你的字符串引用。如果该字符串是双引号,并且您在$query末尾缺少引号,则只能直接在字符串中使用变量。

编辑2015年1月17日:刚刚得到一个upvote,所以考虑到这一点,不再使用mysql_*函数。

答案 1 :(得分:7)

使用:

$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '{$variable}'" ;

为了了解为什么要防止SQL注入攻击,如上所述,我提交“漏洞的妈妈”:

alt text

答案 2 :(得分:5)

答案 3 :(得分:1)

如果您需要替换变量值,请使用双引号

## this code is open for SQL injection attacks
$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable'";

手动连接字符串:

## this code is open for SQL injection attacks
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE "' . $variable . '"';

答案 4 :(得分:1)

您的代码容易受到SQL注入攻击。用户提供的数据永远不应直接放入SQL查询字符串中。相反,它必须首先使用mysql_real_escape_string()等函数进行清理。

答案 5 :(得分:0)

至于为什么您没有收到语法错误的通知:很可能您的错误报告设置未正确设置。

打开php.ini并确保设置以下内容:

display_errors = On

error_reporting = E_ALL