具有$ variable的LIKE运算符

ska*_*ama 2 php sql variables sql-like

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

基本上,我有以下代码:

$variable = curPageURL();
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable' ;
Run Code Online (Sandbox Code Playgroud)

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

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

我试过了 :

    $query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '"echo $variable" ' ;
Run Code Online (Sandbox Code Playgroud)

但同样,我可能会错过或使用错位的";等等

请告诉我我做错了什么!

cee*_*yoz 24

最终,我想要的是能够搜索搜索术语是当前页面的URL,并使用前面和后面的通配符.

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

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

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

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

编辑2015年1月17日:刚刚得到一个upvote,所以考虑到这一点,请不要再使用这些mysql_*功能了.


OMG*_*ies 7

使用:

$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '{$variable}'" ;
Run Code Online (Sandbox Code Playgroud)

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

替代文字


Cad*_*oux 5

请不要这样做,它很容易受到SQL注入的影响(这是一个包含138个StackOverflow问题的列表,您应该在返回应用程序之前阅读,吸收和理解).使用参数化查询或存储过程.

  • 如果你不解释你正在谈论的内容并帮助展示如何修复它,那么关于不良做法的警告对新手来说是无用的. (3认同)
  • 这根本没有帮助. (2认同)
  • +1:有人因为不良做法而受到警告:/ (2认同)