0

我有一个包含“company_name”列的表。现在,对于一些第三方应用程序,我会收到这样的短字符串:Somebody has sent item to "stack-exchange"

我想从字符串中找到带有 stack-exchange company_name 列的行。(换句话说,我希望喜欢操作员以相反的方式工作)。这该怎么做?

编辑:如何检查表中 company_name 的任何值是否与我收到的字符串的一部分匹配?

4

2 回答 2

0

编辑:由于您无法识别输入字符串的哪一部分是公司名称,因此您需要根据字符串检查表中 company_name 的现有值。例如,在 PHP 中:

$input = 'Somebody has sent item to "stack-exchange"';
$result = mysql_query('SELECT company_name FROM table');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    if strpos($input, $row['company_name']) === False {
        print "Company name is not in this row!" /* Substitute whatever action you want here */
    } else {
        print "Company name is in this row!" /* Substitute whatever action you want here */
    }
}

处理用户输入

确保在将输入作为 SQL 查询的一部分之前对其进行了清理。否则,您的代码容易受到黑客攻击。

不幸的是,由于您收到的某些字符串是由用户输入的,因此您无法确定它们是否与您数据库中的内容相匹配。例如,"stack-exchange"可以合理地表示为"Stack Exchange"stack exchangeStackExchange等。因此您需要标准化输入以匹配您在数据库中存储公司名称的方式。例如,您可以将所有字符设为小写,并将所有空格或标点符号替换为连字符。这并不排除诸如拼写错误或变体之类的极端情况,但这超出了本问题的范围。

如果您收到的第三方字符串可靠地包含双引号中的公司名称(并且双引号不用于指示这些字符串中的任何其他内容),您可以使用 PHP 检索公司名称。然后,您可以使用 SQLWHERE子句来获取相关行。

$input  = 'Somebody has sent item to "stack-exchange"';
$parts = explode('"', $input);
$company_name = $parts[1];
$sql_query = 'SELECT * FROM table WHERE company_name="' . $company_name . '"'

于 2013-03-02T14:56:29.900 回答
0

我认为您需要更好地解释这个问题,因为我至少可以用两种方式解释这个问题:i) 电子邮件中提供的字符串与名为 company-name 的列中的某些数据部分匹配:无论哪种方式都使用 like 表达式左右,根据需要添加 % 例如,'%'+companyname+'%' like emailstring [它将从电子邮件中提供的'stack-exchange 中找到'stack-exchange company']

ii) 有多个列,每个列都以公司命名...例如,id、company1、company2、stack-exchange-company、company4

如果您的数据库支持动态 sql(例如,大多数 SQLServer 风格),您可以计算 sql 然后使用 set @sqlexpr = 'select stack-exchange from mytable' exec(@sqlexp)

否则,您需要在调用 db 之前动态创建 sql。

于 2013-03-02T15:09:04.240 回答