这是我在这里的第一个问题,我希望它很简单,可以快速回答!
基本上,我有以下代码:
$variable = curPageURL();
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable' ;
如果我回显$变量,它会打印当前页面的url(这是我页面上的javascript)
最终,我想要的是能够搜索搜索词是当前页面的url,并使用前面和后面的通配符。我不确定这是否可行,或者我是否只是语法错误,因为我没有错误,只是没有结果!
我试过了:
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '"echo $variable" ' ;
但同样,我可能会错过或使用错位的“”等等。
请告诉我我做错了什么!
答案 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注入攻击,如上所述,我提交“漏洞的妈妈”:
答案 2 :(得分:5)
请不要这样做,它容易受到SQL injection (this is a list of 138 StackOverflow questions you should read, absorb and understand prior to returning to your application)的攻击。使用参数化查询或存储过程。
答案 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