如何使用引号进行MySQL搜索查询

时间:2016-06-22 作者:Ernie Bob

大家好,我运行一个基于wordpress的网站,我想存储用户调用的搜索查询,将其用作分析数据,以了解搜索最多的内容等。。。所以我有一个自定义表,其中的行是

query => the searched query
counter => how many times this query has been searched for
所以一切正常,我遇到的唯一问题是撇号。

我需要在数据库中检查查询是否已经存在,因为如果它已经存在,我只需更新计数器,否则我将插入新行。

我使用默认值get_query_var(\'s\') 我相信wordpress会自动转义。

我用来检查搜索的查询是否已存储在数据库中的简单SQL查询如下:

$search_query = get_query_var(\'s\');

$wpdb->get_row("SELECT * FROM $table WHERE query = \'$search_query\'");

if( $wpdb->num_rows == 0 ) { // insert... }
else { // update... }
我有理由认为这个变量很好,因为它正确地存储在数据库中,没有任何额外的斜杠。只是我运行的SQL查询不起作用,它不返回任何结果,因此它不断插入具有相同query 价值

我愿意接受任何解决方案,即使使用LIKE 但我相信我遗漏了一些东西,解决方案比我想象的要简单,我宁愿继续使用= 运算符,因为我需要匹配精确的查询。提前非常感谢大家。

P、 它可以很好地处理没有引号的查询,插入新查询并更新现有查询。

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

哇,那里。你刚刚打开了一罐SQL injection.

我使用默认的get\\u query\\u var(\'s\'),我认为它是由wordpress自动转义的。

不完全是-get_search_query() 会的,但是get_query_var( \'s\' ) 获取“原始”值。

无论如何,始终使用wpdb::prepare 或执行SQL之前的类似转义:

$query = $wpdb->prepare( "SELECT * FROM $table WHERE query = %s", $search_query );
$item  = $wpdb->get_row( $query );

if ( $item === null ) {
     $wpdb->insert( $table, [ \'query\' => $search_query ] );
}
查看awesome helper方法wpdb::insert

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the