PHP检查数据库是否包含字符串

时间:2014-03-04 16:27:37

标签: php mysql

我有一个包含数据的数组,我正在遍历数据。

对于每个字符串,我想检查它是否存在于数据库中(整个表)。它可能在另一个字符串中(所以如果表包含heyredcat,并且你检查红色,它也会返回true)。

我已经想出了这个示例脚本,但我无法提出MySQL查询,Googling为“if column equals string”提出了许多很好的建议,但不是整个表中的字符串。

<?php 
$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value)
   {
      $result = mysql_query("SELECT * FROM products where $value ...... ") or die(mysql_error());
      if($result){
        echo "Color" .$value. "is present";
      else {
        echo "Color" .$value. "is not present";
      }
   }
?>   

我应该使用什么MySQL查询?另外,我想知道,这是一种有效的方法吗? (耗费时间)

3 个答案:

答案 0 :(得分:3)

这就是查询的样子:

$res = mysql_query("SELECT 1 FROM `products` WHERE
    `col1` LIKE '%" . $value . "%'
    OR `col2` LIKE '%" . $value . "%'
    OR `col3` LIKE '%" . $value . "%'
    .. etc
");
$num = mysql_num_rows($res);
if ($num === 0) { // not found

但是请记住,如果用户可以选择颜色列表,则容易受到SQL注入。

所以你想做:

$value = mysql_real_escape_string($value);
mysql_query("SELECT 1 FROM `products` WHERE
    `col1` LIKE '%" . $value . "%'
    OR `col2` LIKE '%" . $value . "%'
    OR `col3` LIKE '%" . $value . "%'
    .. etc
");

可以通过查看mysql架构来动态生成列名。欺骗性的方法是首先SELECT * FROM table LIMIT 1获取所有列名称。


更好的是使用PDO驱动程序,它具有更好(不易出错)的方式将参数插入查询。

答案 1 :(得分:2)

如果你想检查整个数据库,那么你做错了。

以下是如何做到这一点的主要内容:

首先收集所有数据库表和列:

Select table_schema, table_name, column_name from information_schema.COLUMNS where table_schema=[your_db_name] and table_name=[your_table_name]

您刚刚获得了整个数据库服务器列。

现在,您需要检查每列是否与您的字符串一样。

<?php
while ($row = mysqli_fetch_array($result)){
    mysqli_select_db($row['table_schema']);
    $res = mysqli_query('select * from '.$row['table_name'].' where '.$row['column_name'].' like "%'.$your_string.'%"');
    while($res_line = mysqli_fetch_array($res)){
         var_dump($res_line);
     }
}

?>

哦,我不负责任何db滞后:D

你可能想在转储中添加table_schema,table_name和column_name,我不会带来所有的乐趣,有一些。

答案 2 :(得分:0)

您还需要循环访问数据库中每个表的列表,并查询每个表中的每个列。我不知道可以查询数据库中每个表中的每一列的查询。也许你最好使用mysqldump和grep?