【问题标题】:Mysql REGEX Matching queryMysql REGEX 匹配查询
【发布时间】:2011-02-23 15:27:54
【问题描述】:

将字符串变量与 MySQL 字段匹配的正确查询是什么? 例如:

$var_surname = $_POST['surname'];
$var_surname = strtolower($var_surname);

SELECT surname FROM tblname WHERE LOWER(surname) REGEX $var_surname
..........
..........

if($check > 0)
{
    Surname already exists
} 
else 
{
    Successful
}

我们将不胜感激。

【问题讨论】:

  • 我希望你在像这样将$var_surname 插入 SQL 之前对其进行清理!
  • 事实上,即使您正在清理它,在您的数据库服务器上运行用户提供的正则表达式也是在请求 DoS 攻击。这也意味着您必须在不影响正则表达式的情况下为 SQL 清理它。永远不要简单地相信你从 $_POST 得到的东西,从客户端查看和编辑它是微不足道的。
  • @Justin 我希望我能给你的 cmets 投票 100 倍。

标签: php mysql sql regex


【解决方案1】:

我不明白,你为什么使用正则表达式(应该是REGEXP)?做吧

"SELECT surname FROM tblname WHERE LOWER(surname) = '$var_surname'"

【讨论】:

    【解决方案2】:

    REGEX 不是有效的 MySQL 运算符,它是 REGEXP

    SELECT surname FROM tblname WHERE LOWER(surname) REGEXP '$var_surname';
    

    但是,REGEXP 在这种情况下看起来有点过头了——LIKE 运算符或简单的相等性测试应该可以正常工作:

    SELECT surname FROM tblname WHERE LOWER(surname) LIKE '$var_surname';
    

    或者:

    SELECT surname FROM tblname WHERE LOWER(surname) = '$var_surname';
    

    并且在您的查询中使用$var_surname 之前对其进行清理——使用mysql_real_escape_stringPrepared Statements

    【讨论】:

    • 试过 LIKE 并且 = 未验证。记住我正在使用字符串。
    • @Frank $var_surname 是如何创建的?
    • @Frank:LIKE 和 = 都应该适用于 MySQL 字符串值。您是否尝试过在数据库服务器上验证 SELECT surname FROM tblname WHERE LOWER(surname) = 'test';?验证失败可能不是您认为的原因。
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2012-04-05
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多