【问题标题】:Retrieve all data from SQL array LIKE a given value从 SQL 数组中检索所有数据,如给定值
【发布时间】:2011-05-16 08:07:22
【问题描述】:

我正在尝试从其标签(数组)类似于给定值的数据库中检索所有数据 id。 这就是我到目前为止所做的......

$new_string = 'nice phone';
$construct = mysql_query("SELECT tag_array, name, id FROM details 
WHERE tag_array LIKE $new_string%")
or die("<p>died 20: $construct<br>" . mysql_error());

while($getThis = mysql_fetch_array($construct)){
echo $getThis['id'].'<br />';
echo stripslashes($getThis['name']).'<br />';
}

它根本不起作用。 你能指出我正确的方向吗? 我真的好难受!!

【问题讨论】:

  • “它根本不起作用。”那么会发生什么呢?
  • 我加了单引号,抱歉打错了。它与数组中的所有单词都不匹配。在第一个词上。关于如何解决这个问题的任何想法?

标签: php mysql arrays while-loop sql-like


【解决方案1】:

你应该把 $new_string 放在引号里。

注意这是非常糟糕的做法,您应该始终转义您传递给 SQL 的所有变量。您应该认真阅读 SQL 注入和其他安全问题。

此外,如果您想在 tag_array 中的任何位置匹配 $new_string(您很可能想要),您还需要在它前面添加美元符号。你可以在MySQL reference manual阅读更多内容。

所以最后:

"SELECT tag_array, name, id FROM details WHERE tag_array LIKE '%" . mysql_real_escape_string($new_string) . "%'"

【讨论】:

  • @Konerak:谢谢。我知道这一点,但只是忘了逃跑。
  • 我加了单引号,抱歉打错了。它与数组中的所有单词都不匹配。在第一个词上。关于如何解决这个问题的任何想法?
  • 只是为了清楚。 Array1 是 =(男孩、女孩、桌子、椅子)。要搜索的词是表。它不回显 Array1,因为它只与第一个单词进行比较。
  • 不确定我是否理解正确,但如果您想在 tag_array 中的任何位置找到该词,则需要在搜索词的前面和末尾添加 %。现在它只搜索以您的单词开头的 tag_arrays。
  • @enoyhs:感谢修改。
【解决方案2】:

您应该在将数据放入查询之前对其进行清理,例如:

  $new_string = "blah...; DROP TABLE tag_array; #";
  $sql = mysql_real_escape_string($new_string);
  $sql = "SELECT tag_array, name, id FROM details WHERE tag_array LIKE %'$sql'%"

这还不够,尽管它只是有助于防止 sql 注入,请考虑使用正则表达式来清理数据。如果您还不了解正则表达式,请查看此站点:regexp info。它帮助了我。

【讨论】:

  • 请就您的问题添加评论(否决)。
猜你喜欢
  • 2017-12-03
  • 1970-01-01
  • 2014-04-14
  • 2019-10-17
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 2021-10-18
  • 2023-04-06
相关资源
最近更新 更多